Browse Source

test,doc: clarify `buf.indexOf(num)` input range

Hopefully clarify the behaviour of `buffer.indexOf()` and
`buffer.includes()` for numbers in that they will be
truncated to uint8s.

Add tests for that behaviour.

Fixes: https://github.com/nodejs/node/issues/7591
PR-URL: https://github.com/nodejs/node/pull/7611
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
v4.x
Anna Henningsen 9 years ago
committed by Myles Borins
parent
commit
ea72e9f143
  1. 3
      doc/api/buffer.md
  2. 16
      test/parallel/test-buffer-indexof.js

3
doc/api/buffer.md

@ -890,7 +890,8 @@ Operates similar to [`Array#indexOf()`][] in that it returns either the
starting index position of `value` in Buffer or `-1` if the Buffer does not
contain `value`. The `value` can be a String, Buffer or Number. Strings are by
default interpreted as UTF8. Buffers will use the entire Buffer (to compare a
partial Buffer use [`buf.slice()`][]). Numbers can range from 0 to 255.
partial Buffer use [`buf.slice()`][]). Numbers will be interpreted as unsigned 8-bit
integer values between `0` and `255`.
```js
const buf = new Buffer('this is a buffer');

16
test/parallel/test-buffer-indexof.js

@ -302,3 +302,19 @@ assert.throws(function() {
assert.throws(function() {
b.indexOf([]);
});
// test truncation of Number arguments to uint8
{
const buf = Buffer.from('this is a test');
assert.strictEqual(buf.indexOf(0x6973), 3);
assert.strictEqual(buf.indexOf(0x697320), 4);
assert.strictEqual(buf.indexOf(0x69732069), 2);
assert.strictEqual(buf.indexOf(0x697374657374), 0);
assert.strictEqual(buf.indexOf(0x69737374), 0);
assert.strictEqual(buf.indexOf(0x69737465), 11);
assert.strictEqual(buf.indexOf(0x69737465), 11);
assert.strictEqual(buf.indexOf(-140), 0);
assert.strictEqual(buf.indexOf(-152), 1);
assert.strictEqual(buf.indexOf(0xff), -1);
assert.strictEqual(buf.indexOf(0xffff), -1);
}

Loading…
Cancel
Save