crypto: remove kMaxLength on randomBytes()
New Buffer implementation allows greater than kMaxLength to be created. So instead check if the passed value is a valid Smi. PR-URL: https://github.com/nodejs/io.js/pull/1825 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
This commit is contained in:
parent
8664084166
commit
944f68046c
@ -4869,9 +4869,13 @@ void RandomBytes(const FunctionCallbackInfo<Value>& args) {
|
|||||||
return env->ThrowTypeError("size must be a number >= 0");
|
return env->ThrowTypeError("size must be a number >= 0");
|
||||||
}
|
}
|
||||||
|
|
||||||
const uint32_t size = args[0]->Uint32Value();
|
const int64_t size = args[0]->IntegerValue();
|
||||||
if (size > Buffer::kMaxLength) {
|
if (using_old_buffer) {
|
||||||
return env->ThrowTypeError("size > Buffer::kMaxLength");
|
if (size > Buffer::kMaxLength)
|
||||||
|
return env->ThrowTypeError("size > Buffer::kMaxLength");
|
||||||
|
} else {
|
||||||
|
if (!IsValidSmi(size))
|
||||||
|
return env->ThrowRangeError("size is not a valid Smi");
|
||||||
}
|
}
|
||||||
|
|
||||||
Local<Object> obj = Object::New(env->isolate());
|
Local<Object> obj = Object::New(env->isolate());
|
||||||
|
@ -53,5 +53,5 @@ function checkCall(cb, desc) {
|
|||||||
// #5126, "FATAL ERROR: v8::Object::SetIndexedPropertiesToExternalArrayData()
|
// #5126, "FATAL ERROR: v8::Object::SetIndexedPropertiesToExternalArrayData()
|
||||||
// length exceeds max acceptable value"
|
// length exceeds max acceptable value"
|
||||||
assert.throws(function() {
|
assert.throws(function() {
|
||||||
crypto.randomBytes(0x3fffffff + 1);
|
crypto.randomBytes((-1 >>> 0) + 1);
|
||||||
}, TypeError);
|
}, TypeError);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user