diff --git a/lib/buffer.js b/lib/buffer.js index 91c13521ac..6891b776fd 100644 --- a/lib/buffer.js +++ b/lib/buffer.js @@ -476,8 +476,8 @@ Buffer.prototype.readUInt32BE = function(offset, noAssert) { return (this[offset] * 0x1000000) + ((this[offset + 1] << 16) | - (this[offset + 2] << 8)) | - (this[offset + 3]); + (this[offset + 2] << 8) | + (this[offset + 3]) >>> 0); }; diff --git a/test/simple/test-buffer.js b/test/simple/test-buffer.js index 54dd7de8cf..c3d210fb4d 100644 --- a/test/simple/test-buffer.js +++ b/test/simple/test-buffer.js @@ -914,6 +914,13 @@ var buf = new Buffer(0); assert.throws(function() { buf.readUInt8(0); }, RangeError); assert.throws(function() { buf.readInt8(0); }, RangeError); +var buf = new Buffer([0xFF]); + +assert.equal(buf.readUInt8(0), 255); +assert.equal(buf.readInt8(0), -1); + + + [16, 32].forEach(function(bits) { var buf = new Buffer(bits / 8 - 1); @@ -934,6 +941,22 @@ assert.throws(function() { buf.readInt8(0); }, RangeError); 'readInt' + bits + 'LE()'); }); +[16, 32].forEach(function(bits) { + var buf = new Buffer([0xFF, 0xFF, 0xFF, 0xFF]); + + assert.equal(buf['readUInt' + bits + 'BE'](0), + (0xFFFFFFFF >>> (32 - bits))); + + assert.equal(buf['readUInt' + bits + 'LE'](0), + (0xFFFFFFFF >>> (32 - bits))); + + assert.equal(buf['readInt' + bits + 'BE'](0), + (0xFFFFFFFF >> (32 - bits))); + + assert.equal(buf['readInt' + bits + 'LE'](0), + (0xFFFFFFFF >> (32 - bits))); +}); + // test Buffer slice (function() { var buf = new Buffer('0123456789');