buffer: support boxed strings and toPrimitive · nodejs/node@683f743 · GitHub
Skip to content

Commit 683f743

Browse files
jasnelladdaleax
authored andcommitted
buffer: support boxed strings and toPrimitive
Add support for `Buffer.from(new String('...'))` and `Buffer.from({[Symbol.toPrimitive]() { return '...'; }})` PR-URL: #13725 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
1 parent 70f3935 commit 683f743

3 files changed

Lines changed: 111 additions & 2 deletions

File tree

doc/api/buffer.md

Lines changed: 38 additions & 0 deletions

lib/buffer.js

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,12 +175,26 @@ Buffer.from = function(value, encodingOrOffset, length) {
175175
if (isAnyArrayBuffer(value))
176176
return fromArrayBuffer(value, encodingOrOffset, length);
177177

178+
if (value == null)
179+
throw new TypeError(kFromErrorMsg);
180+
181+
if (typeof value === 'number')
182+
throw new TypeError('"value" argument must not be a number');
183+
184+
const valueOf = value.valueOf && value.valueOf();
185+
if (valueOf != null && valueOf !== value)
186+
return Buffer.from(valueOf, encodingOrOffset, length);
187+
178188
var b = fromObject(value);
179189
if (b)
180190
return b;
181191

182-
if (typeof value === 'number')
183-
throw new TypeError('"value" argument must not be a number');
192+
if (typeof value[Symbol.toPrimitive] === 'function') {
193+
return Buffer.from(value[Symbol.toPrimitive]('string'),
194+
encodingOrOffset,
195+
length);
196+
}
197+
184198
throw new TypeError(kFromErrorMsg);
185199
};
186200

test/parallel/test-buffer-from.js

Lines changed: 57 additions & 0 deletions

0 commit comments

Comments
 (0)