Skip to content

Commit 6ae2caf

Browse files
BridgeARMylesBorins
authored andcommitted
buffer: coerce offset to integer
The offset was formerly coerced to a integer and this reimplements that. PR-URL: #18215Fixes: #18208 Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Ben Noordhuis <[email protected]> Reviewed-By: Richard Lau <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Tobias Nießen <[email protected]>
1 parent 3d4cda3 commit 6ae2caf

File tree

2 files changed

+102
-99
lines changed

2 files changed

+102
-99
lines changed

‎lib/buffer.js‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1242,25 +1242,29 @@ function toFloat(x){
12421242

12431243

12441244
Buffer.prototype.readDoubleBE=function(offset,noAssert){
1245+
offset=offset>>>0;
12451246
constx1=this.readUInt32BE(offset+0,noAssert);
12461247
constx0=this.readUInt32BE(offset+4,noAssert);
12471248
returntoDouble(x0,x1);
12481249
};
12491250

12501251

12511252
Buffer.prototype.readDoubleLE=function(offset,noAssert){
1253+
offset=offset>>>0;
12521254
constx0=this.readUInt32LE(offset+0,noAssert);
12531255
constx1=this.readUInt32LE(offset+4,noAssert);
12541256
returntoDouble(x0,x1);
12551257
};
12561258

12571259

12581260
Buffer.prototype.readFloatBE=function(offset,noAssert){
1261+
offset=offset>>>0;
12591262
returntoFloat(this.readUInt32BE(offset,noAssert));
12601263
};
12611264

12621265

12631266
Buffer.prototype.readFloatLE=function(offset,noAssert){
1267+
offset=offset>>>0;
12641268
returntoFloat(this.readUInt32LE(offset,noAssert));
12651269
};
12661270

‎test/parallel/test-readdouble.js‎

Lines changed: 98 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -29,102 +29,101 @@ const assert = require('assert');
2929
/*
3030
* Test (64 bit) double
3131
*/
32-
functiontest(clazz){
33-
constbuffer=newclazz(8);
34-
35-
buffer[0]=0x55;
36-
buffer[1]=0x55;
37-
buffer[2]=0x55;
38-
buffer[3]=0x55;
39-
buffer[4]=0x55;
40-
buffer[5]=0x55;
41-
buffer[6]=0xd5;
42-
buffer[7]=0x3f;
43-
assert.strictEqual(1.1945305291680097e+103,buffer.readDoubleBE(0));
44-
assert.strictEqual(0.3333333333333333,buffer.readDoubleLE(0));
45-
46-
buffer[0]=1;
47-
buffer[1]=0;
48-
buffer[2]=0;
49-
buffer[3]=0;
50-
buffer[4]=0;
51-
buffer[5]=0;
52-
buffer[6]=0xf0;
53-
buffer[7]=0x3f;
54-
assert.strictEqual(7.291122019655968e-304,buffer.readDoubleBE(0));
55-
assert.strictEqual(1.0000000000000002,buffer.readDoubleLE(0));
56-
57-
buffer[0]=2;
58-
assert.strictEqual(4.778309726801735e-299,buffer.readDoubleBE(0));
59-
assert.strictEqual(1.0000000000000004,buffer.readDoubleLE(0));
60-
61-
buffer[0]=1;
62-
buffer[6]=0;
63-
buffer[7]=0;
64-
assert.strictEqual(7.291122019556398e-304,buffer.readDoubleBE(0));
65-
assert.strictEqual(5e-324,buffer.readDoubleLE(0));
66-
67-
buffer[0]=0xff;
68-
buffer[1]=0xff;
69-
buffer[2]=0xff;
70-
buffer[3]=0xff;
71-
buffer[4]=0xff;
72-
buffer[5]=0xff;
73-
buffer[6]=0x0f;
74-
buffer[7]=0x00;
75-
assert.ok(Number.isNaN(buffer.readDoubleBE(0)));
76-
assert.strictEqual(2.225073858507201e-308,buffer.readDoubleLE(0));
77-
78-
buffer[6]=0xef;
79-
buffer[7]=0x7f;
80-
assert.ok(Number.isNaN(buffer.readDoubleBE(0)));
81-
assert.strictEqual(1.7976931348623157e+308,buffer.readDoubleLE(0));
82-
83-
buffer[0]=0;
84-
buffer[1]=0;
85-
buffer[2]=0;
86-
buffer[3]=0;
87-
buffer[4]=0;
88-
buffer[5]=0;
89-
buffer[6]=0xf0;
90-
buffer[7]=0x3f;
91-
assert.strictEqual(3.03865e-319,buffer.readDoubleBE(0));
92-
assert.strictEqual(1,buffer.readDoubleLE(0));
93-
94-
buffer[6]=0;
95-
buffer[7]=0x40;
96-
assert.strictEqual(3.16e-322,buffer.readDoubleBE(0));
97-
assert.strictEqual(2,buffer.readDoubleLE(0));
98-
99-
buffer[7]=0xc0;
100-
assert.strictEqual(9.5e-322,buffer.readDoubleBE(0));
101-
assert.strictEqual(-2,buffer.readDoubleLE(0));
102-
103-
buffer[6]=0x10;
104-
buffer[7]=0;
105-
assert.strictEqual(2.0237e-320,buffer.readDoubleBE(0));
106-
assert.strictEqual(2.2250738585072014e-308,buffer.readDoubleLE(0));
107-
108-
buffer[6]=0;
109-
assert.strictEqual(0,buffer.readDoubleBE(0));
110-
assert.strictEqual(0,buffer.readDoubleLE(0));
111-
assert.strictEqual(false,1/buffer.readDoubleLE(0)<0);
112-
113-
buffer[7]=0x80;
114-
assert.strictEqual(6.3e-322,buffer.readDoubleBE(0));
115-
assert.strictEqual(0,buffer.readDoubleLE(0));
116-
assert.strictEqual(true,1/buffer.readDoubleLE(0)<0);
117-
118-
buffer[6]=0xf0;
119-
buffer[7]=0x7f;
120-
assert.strictEqual(3.0418e-319,buffer.readDoubleBE(0));
121-
assert.strictEqual(Infinity,buffer.readDoubleLE(0));
122-
123-
buffer[6]=0xf0;
124-
buffer[7]=0xff;
125-
assert.strictEqual(3.04814e-319,buffer.readDoubleBE(0));
126-
assert.strictEqual(-Infinity,buffer.readDoubleLE(0));
127-
}
128-
129-
130-
test(Buffer);
32+
constbuffer=Buffer.allocUnsafe(8);
33+
34+
buffer[0]=0x55;
35+
buffer[1]=0x55;
36+
buffer[2]=0x55;
37+
buffer[3]=0x55;
38+
buffer[4]=0x55;
39+
buffer[5]=0x55;
40+
buffer[6]=0xd5;
41+
buffer[7]=0x3f;
42+
assert.strictEqual(1.1945305291680097e+103,buffer.readDoubleBE(0));
43+
assert.strictEqual(0.3333333333333333,buffer.readDoubleLE(0));
44+
45+
buffer[0]=1;
46+
buffer[1]=0;
47+
buffer[2]=0;
48+
buffer[3]=0;
49+
buffer[4]=0;
50+
buffer[5]=0;
51+
buffer[6]=0xf0;
52+
buffer[7]=0x3f;
53+
assert.strictEqual(7.291122019655968e-304,buffer.readDoubleBE(0));
54+
assert.strictEqual(1.0000000000000002,buffer.readDoubleLE(0));
55+
56+
buffer[0]=2;
57+
assert.strictEqual(4.778309726801735e-299,buffer.readDoubleBE(0));
58+
assert.strictEqual(1.0000000000000004,buffer.readDoubleLE(0));
59+
60+
buffer[0]=1;
61+
buffer[6]=0;
62+
buffer[7]=0;
63+
assert.strictEqual(7.291122019556398e-304,buffer.readDoubleBE(0));
64+
assert.strictEqual(5e-324,buffer.readDoubleLE(0));
65+
66+
buffer[0]=0xff;
67+
buffer[1]=0xff;
68+
buffer[2]=0xff;
69+
buffer[3]=0xff;
70+
buffer[4]=0xff;
71+
buffer[5]=0xff;
72+
buffer[6]=0x0f;
73+
buffer[7]=0x00;
74+
assert.ok(Number.isNaN(buffer.readDoubleBE(0)));
75+
assert.strictEqual(2.225073858507201e-308,buffer.readDoubleLE(0));
76+
77+
buffer[6]=0xef;
78+
buffer[7]=0x7f;
79+
assert.ok(Number.isNaN(buffer.readDoubleBE(0)));
80+
assert.strictEqual(1.7976931348623157e+308,buffer.readDoubleLE(0));
81+
82+
buffer[0]=0;
83+
buffer[1]=0;
84+
buffer[2]=0;
85+
buffer[3]=0;
86+
buffer[4]=0;
87+
buffer[5]=0;
88+
buffer[6]=0xf0;
89+
buffer[7]=0x3f;
90+
assert.strictEqual(3.03865e-319,buffer.readDoubleBE(0));
91+
assert.strictEqual(1,buffer.readDoubleLE(0));
92+
93+
buffer[6]=0;
94+
buffer[7]=0x40;
95+
assert.strictEqual(3.16e-322,buffer.readDoubleBE(0));
96+
assert.strictEqual(2,buffer.readDoubleLE(0));
97+
98+
buffer[7]=0xc0;
99+
assert.strictEqual(9.5e-322,buffer.readDoubleBE(0));
100+
assert.strictEqual(-2,buffer.readDoubleLE(0));
101+
102+
buffer[6]=0x10;
103+
buffer[7]=0;
104+
assert.strictEqual(2.0237e-320,buffer.readDoubleBE(0));
105+
assert.strictEqual(2.2250738585072014e-308,buffer.readDoubleLE(0));
106+
107+
buffer[6]=0;
108+
assert.strictEqual(0,buffer.readDoubleBE(0));
109+
assert.strictEqual(0,buffer.readDoubleLE(0));
110+
assert.strictEqual(false,1/buffer.readDoubleLE(0)<0);
111+
112+
buffer[7]=0x80;
113+
assert.strictEqual(6.3e-322,buffer.readDoubleBE(0));
114+
assert.strictEqual(-0,buffer.readDoubleLE(0));
115+
assert.strictEqual(true,1/buffer.readDoubleLE(0)<0);
116+
117+
buffer[6]=0xf0;
118+
buffer[7]=0x7f;
119+
assert.strictEqual(3.0418e-319,buffer.readDoubleBE(0));
120+
assert.strictEqual(Infinity,buffer.readDoubleLE(0));
121+
122+
buffer[7]=0xff;
123+
assert.strictEqual(3.04814e-319,buffer.readDoubleBE(0));
124+
assert.strictEqual(-Infinity,buffer.readDoubleLE(0));
125+
126+
buffer.writeDoubleBE(246800);
127+
assert.strictEqual(buffer.readDoubleBE(),246800);
128+
assert.strictEqual(buffer.readDoubleBE(0.7),246800);
129+
assert.strictEqual(buffer.readDoubleBE(NaN),246800);

0 commit comments

Comments
(0)