src: make buffer size errors more explicit
authorTrevor Norris <trev.norris@gmail.com>
Thu, 14 Nov 2013 01:19:53 +0000 (17:19 -0800)
committerTrevor Norris <trev.norris@gmail.com>
Fri, 15 Nov 2013 19:48:08 +0000 (11:48 -0800)
Fixes #6490

lib/buffer.js
lib/fs.js

index d5e5042..bfaee2c 100644 (file)
@@ -58,8 +58,10 @@ function Buffer(subject, encoding) {
   else
     throw new TypeError('must start with number, buffer, array or string');
 
-  if (this.length > kMaxLength)
-    throw new RangeError('length > kMaxLength');
+  if (this.length > kMaxLength) {
+    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
+                         'size: 0x' + kMaxLength.toString(16) + ' bytes');
+  }
 
   if (this.length < Buffer.poolSize / 2 && this.length > 0) {
     if (this.length > poolSize - poolOffset)
@@ -92,8 +94,10 @@ function Buffer(subject, encoding) {
 
 function SlowBuffer(length) {
   length = length >>> 0;
-  if (length > kMaxLength)
-    throw new RangeError('length > kMaxLength');
+  if (this.length > kMaxLength) {
+    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
+                         'size: 0x' + kMaxLength.toString(16) + ' bytes');
+  }
   var b = new NativeBuffer(length);
   alloc(b, length);
   return b;
index 77266eb..b5683e5 100644 (file)
--- a/lib/fs.js
+++ b/lib/fs.js
@@ -38,6 +38,7 @@ var Readable = Stream.Readable;
 var Writable = Stream.Writable;
 
 var kMinPoolSpace = 128;
+var kMaxLength = require('smalloc').kMaxLength;
 
 var O_APPEND = constants.O_APPEND || 0;
 var O_CREAT = constants.O_CREAT || 0;
@@ -204,6 +205,10 @@ fs.readFile = function(path, options, callback_) {
         return read();
       }
 
+      if (size > kMaxLength)
+        throw new RangeError('File size is greater than possible Buffer: ' +
+                             '0x3FFFFFFF bytes');
+
       buffer = new Buffer(size);
       read();
     });