diff --git a/test/parallel/test-stringbytes-external-at-max.js b/test/parallel/test-stringbytes-external-at-max.js new file mode 100644 index 0000000000..6678e53552 --- /dev/null +++ b/test/parallel/test-stringbytes-external-at-max.js @@ -0,0 +1,22 @@ +'use strict'; + +require('../common'); +const assert = require('assert'); + +// v8 fails silently if string length > v8::String::kMaxLength +// v8::String::kMaxLength defined in v8.h +const kStringMaxLength = process.binding('buffer').kStringMaxLength; + +try { + new Buffer(kStringMaxLength * 3); +} catch(e) { + assert.equal(e.message, 'Invalid array buffer length'); + console.log( + '1..0 # Skipped: intensive toString tests due to memory confinements'); + return; +} + +const buf = new Buffer(kStringMaxLength); + +const maxString = buf.toString('binary'); +assert.equal(maxString.length, kStringMaxLength); diff --git a/test/parallel/test-stringbytes-external-exceed-max-by-1.js b/test/parallel/test-stringbytes-external-exceed-max-by-1.js new file mode 100644 index 0000000000..8e2a5bf01f --- /dev/null +++ b/test/parallel/test-stringbytes-external-exceed-max-by-1.js @@ -0,0 +1,52 @@ +'use strict'; + +require('../common'); +const assert = require('assert'); + +// v8 fails silently if string length > v8::String::kMaxLength +// v8::String::kMaxLength defined in v8.h +const kStringMaxLength = process.binding('buffer').kStringMaxLength; + +try { + new Buffer(kStringMaxLength * 3); +} catch(e) { + assert.equal(e.message, 'Invalid array buffer length'); + console.log( + '1..0 # Skipped: intensive toString tests due to memory confinements'); + return; +} + +const buf1 = new Buffer(kStringMaxLength + 1); + +assert.throws(function() { + buf1.toString(); +}, /toString failed|Invalid array buffer length/); + +assert.throws(function() { + buf1.toString('ascii'); +}, /toString failed/); + +assert.throws(function() { + buf1.toString('utf8'); +}, /toString failed/); + +assert.throws(function() { + buf1.toString('binary'); +}, /toString failed/); + +assert.throws(function() { + buf1.toString('base64'); +}, /toString failed/); + +assert.throws(function() { + buf1.toString('hex'); +}, /toString failed/); + +var maxString = buf1.toString('binary', 1); +assert.equal(maxString.length, kStringMaxLength); +maxString = undefined; + +maxString = buf1.toString('binary', 0, kStringMaxLength); +assert.equal(maxString.length, kStringMaxLength); +// Free the memory early instead of at the end of the next assignment +maxString = undefined; diff --git a/test/parallel/test-stringbytes-external-exceed-max-by-2.js b/test/parallel/test-stringbytes-external-exceed-max-by-2.js new file mode 100644 index 0000000000..879e4ae91d --- /dev/null +++ b/test/parallel/test-stringbytes-external-exceed-max-by-2.js @@ -0,0 +1,22 @@ +'use strict'; + +require('../common'); +const assert = require('assert'); + +// v8 fails silently if string length > v8::String::kMaxLength +// v8::String::kMaxLength defined in v8.h +const kStringMaxLength = process.binding('buffer').kStringMaxLength; + +try { + new Buffer(kStringMaxLength * 3); +} catch(e) { + assert.equal(e.message, 'Invalid array buffer length'); + console.log( + '1..0 # Skipped: intensive toString tests due to memory confinements'); + return; +} + +const buf2 = new Buffer(kStringMaxLength + 2); + +const maxString = buf2.toString('utf16le'); +assert.equal(maxString.length, (kStringMaxLength + 2) / 2); diff --git a/test/parallel/test-stringbytes-external-exceed-max.js b/test/parallel/test-stringbytes-external-exceed-max.js new file mode 100644 index 0000000000..0a6f585b66 --- /dev/null +++ b/test/parallel/test-stringbytes-external-exceed-max.js @@ -0,0 +1,23 @@ +'use strict'; + +require('../common'); +const assert = require('assert'); + +// v8 fails silently if string length > v8::String::kMaxLength +// v8::String::kMaxLength defined in v8.h +const kStringMaxLength = process.binding('buffer').kStringMaxLength; + +try { + new Buffer(kStringMaxLength * 3); +} catch(e) { + assert.equal(e.message, 'Invalid array buffer length'); + console.log( + '1..0 # Skipped: intensive toString tests due to memory confinements'); + return; +} + +const buf0 = new Buffer(kStringMaxLength * 2 + 2); + +assert.throws(function() { + buf0.toString('utf16le'); +}, /toString failed/); diff --git a/test/parallel/test-stringbytes-external.js b/test/parallel/test-stringbytes-external.js index ddbbcd599f..ba3f0c5d1d 100644 --- a/test/parallel/test-stringbytes-external.js +++ b/test/parallel/test-stringbytes-external.js @@ -107,72 +107,3 @@ var PRE_3OF4_APEX = Math.ceil((EXTERN_APEX / 4) * 3) - RADIOS; assert.equal(a, b); assert.equal(b, c); })(); - -// v8 fails silently if string length > v8::String::kMaxLength -(function() { - // v8::String::kMaxLength defined in v8.h - const kStringMaxLength = process.binding('buffer').kStringMaxLength; - - try { - new Buffer(kStringMaxLength * 3); - } catch(e) { - assert.equal(e.message, 'Invalid array buffer length'); - console.log( - '1..0 # Skipped: intensive toString tests due to memory confinements'); - return; - } - - const buf0 = new Buffer(kStringMaxLength * 2 + 2); - const buf1 = buf0.slice(0, kStringMaxLength + 1); - const buf2 = buf0.slice(0, kStringMaxLength); - const buf3 = buf0.slice(0, kStringMaxLength + 2); - - assert.throws(function() { - buf1.toString(); - }, /toString failed|Invalid array buffer length/); - - assert.throws(function() { - buf1.toString('ascii'); - }, /toString failed/); - - assert.throws(function() { - buf1.toString('utf8'); - }, /toString failed/); - - assert.throws(function() { - buf0.toString('utf16le'); - }, /toString failed/); - - assert.throws(function() { - buf1.toString('binary'); - }, /toString failed/); - - assert.throws(function() { - buf1.toString('base64'); - }, /toString failed/); - - assert.throws(function() { - buf1.toString('hex'); - }, /toString failed/); - - var maxString = buf2.toString(); - assert.equal(maxString.length, kStringMaxLength); - // Free the memory early instead of at the end of the next assignment - maxString = undefined; - - maxString = buf2.toString('binary'); - assert.equal(maxString.length, kStringMaxLength); - maxString = undefined; - - maxString = buf1.toString('binary', 1); - assert.equal(maxString.length, kStringMaxLength); - maxString = undefined; - - maxString = buf1.toString('binary', 0, kStringMaxLength); - assert.equal(maxString.length, kStringMaxLength); - maxString = undefined; - - maxString = buf3.toString('utf16le'); - assert.equal(maxString.length, (kStringMaxLength + 2) / 2); - maxString = undefined; -})();