Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 6ae2caf

Browse filesBrowse files
BridgeARMylesBorins
authored andcommitted
buffer: coerce offset to integer
The offset was formerly coerced to a integer and this reimplements that. PR-URL: #18215 Fixes: #18208 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Richard Lau <riclau@uk.ibm.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de>
1 parent 3d4cda3 commit 6ae2caf
Copy full SHA for 6ae2caf

File tree

Expand file treeCollapse file tree

2 files changed

+102
-99
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

2 files changed

+102
-99
lines changed
Open diff view settings
Collapse file

‎lib/buffer.js‎

Copy file name to clipboardExpand all lines: lib/buffer.js
+4Lines 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
const x1 = this.readUInt32BE(offset + 0, noAssert);
12461247
const x0 = this.readUInt32BE(offset + 4, noAssert);
12471248
return toDouble(x0, x1);
12481249
};
12491250

12501251

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

12571259

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

12621265

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

Collapse file

‎test/parallel/test-readdouble.js‎

Copy file name to clipboardExpand all lines: test/parallel/test-readdouble.js
+98-99Lines 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-
function test(clazz) {
33-
const buffer = new clazz(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+
const buffer = 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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.