crypto: remove kMaxLength on randomBytes()
authorTrevor Norris <trev.norris@gmail.com>
Tue, 2 Jun 2015 19:10:47 +0000 (13:10 -0600)
committerRod Vagg <rod@vagg.org>
Tue, 4 Aug 2015 18:56:11 +0000 (11:56 -0700)
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>
src/node_crypto.cc
test/parallel/test-crypto-random.js

index 953bf1b..3dc1bfa 100644 (file)
@@ -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());
index 3454796..2d28ccc 100644 (file)
@@ -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);