mirror of https://github.com/lukechilds/node.git
Browse Source
Add support for `Buffer.from(new String('...'))` and `Buffer.from({[Symbol.toPrimitive]() { return '...'; }})` PR-URL: https://github.com/nodejs/node/pull/13725 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>v6
3 changed files with 111 additions and 2 deletions
@ -0,0 +1,57 @@ |
|||||
|
'use strict'; |
||||
|
|
||||
|
require('../common'); |
||||
|
const { deepStrictEqual, throws } = require('assert'); |
||||
|
const { Buffer } = require('buffer'); |
||||
|
const { runInNewContext } = require('vm'); |
||||
|
|
||||
|
const checkString = 'test'; |
||||
|
|
||||
|
const check = Buffer.from(checkString); |
||||
|
|
||||
|
class MyString extends String { |
||||
|
constructor() { |
||||
|
super(checkString); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
class MyPrimitive { |
||||
|
[Symbol.toPrimitive]() { |
||||
|
return checkString; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
class MyBadPrimitive { |
||||
|
[Symbol.toPrimitive]() { |
||||
|
return 1; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
deepStrictEqual(Buffer.from(new String(checkString)), check); |
||||
|
deepStrictEqual(Buffer.from(new MyString()), check); |
||||
|
deepStrictEqual(Buffer.from(new MyPrimitive()), check); |
||||
|
deepStrictEqual(Buffer.from( |
||||
|
runInNewContext('new String(checkString)', {checkString})), |
||||
|
check); |
||||
|
|
||||
|
const err = new RegExp('^TypeError: First argument must be a string, Buffer, ' + |
||||
|
'ArrayBuffer, Array, or array-like object\\.$'); |
||||
|
|
||||
|
[ |
||||
|
{}, |
||||
|
new Boolean(true), |
||||
|
{ valueOf() { return null; } }, |
||||
|
{ valueOf() { return undefined; } }, |
||||
|
{ valueOf: null }, |
||||
|
Object.create(null) |
||||
|
].forEach((input) => { |
||||
|
throws(() => Buffer.from(input), err); |
||||
|
}); |
||||
|
|
||||
|
[ |
||||
|
new Number(true), |
||||
|
new MyBadPrimitive() |
||||
|
].forEach((input) => { |
||||
|
throws(() => Buffer.from(input), |
||||
|
/^TypeError: "value" argument must not be a number$/); |
||||
|
}); |
Loading…
Reference in new issue