buffer: fix assert fail from JS API
authorTrevor Norris <trev.norris@gmail.com>
Mon, 26 Aug 2013 10:26:31 +0000 (03:26 -0700)
committerTrevor Norris <trev.norris@gmail.com>
Mon, 26 Aug 2013 21:12:00 +0000 (14:12 -0700)
Length arguments passed to SlowBuffer were coerced to Int32, not Uint32,
so passing a negative number would throw the following:

node: ../src/smalloc.cc:244: void node::smalloc::Alloc(): Assertion `length <= kMaxLength' failed.
Aborted (core dumped)

That has been fixed by coercing to Uint32 and comparing the value
against kMaxLength.

lib/buffer.js

index fc6b657..dfd79e6 100644 (file)
@@ -89,7 +89,9 @@ function Buffer(subject, encoding) {
 
 
 function SlowBuffer(length) {
-  length = ~~length;
+  length = length >>> 0;
+  if (length > kMaxLength)
+    throw new RangeError('length > kMaxLength');
   var b = new NativeBuffer(length);
   alloc(b, length);
   return b;