Skip to content

Commit

Permalink
buffer: allow encoding param to collapse
Browse files Browse the repository at this point in the history
Currently the signature is indexOf(val[, byteOffset[, encoding]])
Instead allow indexOf(val[, byteOffset][, encoding])
so that byteOffset does not need to be passed.

PR-URL: #4803
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information
trevnorris authored and Myles Borins committed Mar 2, 2016
1 parent 288f4c2 commit faf606f
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 2 deletions.
8 changes: 6 additions & 2 deletions lib/buffer.js
Original file line number Diff line number Diff line change
Expand Up @@ -456,10 +456,14 @@ function slowIndexOf(buffer, val, byteOffset, encoding) {
}

Buffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) {
if (byteOffset > 0x7fffffff)
if (typeof byteOffset === 'string') {
encoding = byteOffset;
byteOffset = 0;
} else if (byteOffset > 0x7fffffff) {
byteOffset = 0x7fffffff;
else if (byteOffset < -0x80000000)
} else if (byteOffset < -0x80000000) {
byteOffset = -0x80000000;
}
byteOffset >>= 0;

if (typeof val === 'string') {
Expand Down
16 changes: 16 additions & 0 deletions test/parallel/test-buffer-indexof.js
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ assert.equal(
assert.equal(
Buffer(b.toString('binary'), 'binary')
.indexOf(Buffer('d', 'binary'), 0, 'binary'), 3);

assert.equal(
Buffer('aa\u00e8aa', 'binary')
.indexOf('\u00e8', 'binary'), 2);
Expand All @@ -131,6 +132,21 @@ assert.equal(
assert.equal(-1, twoByteString.indexOf('\u03a3', -2, 'ucs2'));
}

// test optional offset with passed encoding
assert.equal(new Buffer('aaaa0').indexOf('30', 'hex'), 4);
assert.equal(new Buffer('aaaa00a').indexOf('3030', 'hex'), 4);


// test usc2 encoding
var twoByteString = new Buffer('\u039a\u0391\u03a3\u03a3\u0395', 'ucs2');

assert.equal(8, twoByteString.indexOf('\u0395', 4, 'ucs2'));
assert.equal(6, twoByteString.indexOf('\u03a3', -4, 'ucs2'));
assert.equal(4, twoByteString.indexOf('\u03a3', -6, 'ucs2'));
assert.equal(4, twoByteString.indexOf(
new Buffer('\u03a3', 'ucs2'), -6, 'ucs2'));
assert.equal(-1, twoByteString.indexOf('\u03a3', -2, 'ucs2'));

var mixedByteStringUcs2 =
new Buffer('\u039a\u0391abc\u03a3\u03a3\u0395', 'ucs2');
assert.equal(6, mixedByteStringUcs2.indexOf('bc', 0, 'ucs2'));
Expand Down

0 comments on commit faf606f

Please sign in to comment.