Browse Source

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>
v4.0.0-rc
Trevor Norris 10 years ago
committed by Rod Vagg
parent
commit
944f68046c
  1. 10
      src/node_crypto.cc
  2. 2
      test/parallel/test-crypto-random.js

10
src/node_crypto.cc

@ -4869,9 +4869,13 @@ void RandomBytes(const FunctionCallbackInfo<Value>& args) {
return env->ThrowTypeError("size must be a number >= 0");
}
const uint32_t size = args[0]->Uint32Value();
if (size > Buffer::kMaxLength) {
return env->ThrowTypeError("size > Buffer::kMaxLength");
const int64_t size = args[0]->IntegerValue();
if (using_old_buffer) {
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());

2
test/parallel/test-crypto-random.js

@ -53,5 +53,5 @@ function checkCall(cb, desc) {
// #5126, "FATAL ERROR: v8::Object::SetIndexedPropertiesToExternalArrayData()
// length exceeds max acceptable value"
assert.throws(function() {
crypto.randomBytes(0x3fffffff + 1);
crypto.randomBytes((-1 >>> 0) + 1);
}, TypeError);

Loading…
Cancel
Save