From b65339bb10d1ddc5aed3c10abee86e35fb7a8f0c Mon Sep 17 00:00:00 2001 From: Luigi Pinca Date: Tue, 17 Jun 2025 10:20:56 +0200 Subject: [PATCH 1/2] test: skip the test if the buffer allocation fails Use the error message as another condition to skip the test when the buffer allocation fails. Refs: https://github.com/nodejs/node/commit/795dd8eb7988ae38553e Refs: https://github.com/nodejs/node/commit/e9c6004a2d580008082b --- ...fer-large-size-buffer-alloc-unsafe-slow.js | 18 ++++++++++++---- .../test-buffer-large-size-buffer-write.js | 21 ++++++++++++------- .../test-buffer-large-size-slowbuffer.js | 20 ++++++++++++------ .../test-string-decoder-large-buffer.js | 19 +++++++++++------ 4 files changed, 55 insertions(+), 23 deletions(-) diff --git a/test/pummel/test-buffer-large-size-buffer-alloc-unsafe-slow.js b/test/pummel/test-buffer-large-size-buffer-alloc-unsafe-slow.js index aafa0eaf66e06a..d54040e0e185ba 100644 --- a/test/pummel/test-buffer-large-size-buffer-alloc-unsafe-slow.js +++ b/test/pummel/test-buffer-large-size-buffer-alloc-unsafe-slow.js @@ -7,12 +7,22 @@ common.skipIf32Bits(); const assert = require('node:assert'); const size = 2 ** 31; +let largeBuffer; + // Test Buffer.allocUnsafe with size larger than integer range try { - assert.throws(() => Buffer.allocUnsafeSlow(size).toString('utf8'), { code: 'ERR_STRING_TOO_LONG' }); + largeBuffer = Buffer.allocUnsafeSlow(size); } catch (e) { - if (e.code !== 'ERR_MEMORY_ALLOCATION_FAILED') { - throw e; + if ( + e.code === 'ERR_MEMORY_ALLOCATION_FAILED' || + /Array buffer allocation failed/.test(e.message) + ) { + common.skip('insufficient space for Buffer.allocUnsafeSlow'); } - common.skip('insufficient space for Buffer.allocUnsafeSlow'); + + throw e; } + +assert.throws(() => largeBuffer.toString('utf8'), { + code: 'ERR_STRING_TOO_LONG', +}); diff --git a/test/pummel/test-buffer-large-size-buffer-write.js b/test/pummel/test-buffer-large-size-buffer-write.js index 6579e75ea85a08..37e113a06d0f65 100644 --- a/test/pummel/test-buffer-large-size-buffer-write.js +++ b/test/pummel/test-buffer-large-size-buffer-write.js @@ -9,14 +9,21 @@ const kStringMaxLength = require('buffer').constants.MAX_STRING_LENGTH; const size = 2 ** 31; -// Test Buffer.write with size larger than integer range +let largeBuffer; + try { - const buf = Buffer.alloc(size); - assert.strictEqual(buf.write('a', 2, kStringMaxLength), 1); - assert.strictEqual(buf.write('a', 2, size), 1); + largeBuffer = Buffer.alloc(size); } catch (e) { - if (e.code !== 'ERR_MEMORY_ALLOCATION_FAILED') { - throw e; + if ( + e.code === 'ERR_MEMORY_ALLOCATION_FAILED' || + /Array buffer allocation failed/.test(e.message) + ) { + common.skip('insufficient space for Buffer.alloc'); } - common.skip('insufficient space for Buffer.alloc'); + + throw e; } + +// Test Buffer.write with size larger than integer range +assert.strictEqual(largeBuffer.write('a', 2, kStringMaxLength), 1); +assert.strictEqual(largeBuffer.write('a', 2, size), 1); diff --git a/test/pummel/test-buffer-large-size-slowbuffer.js b/test/pummel/test-buffer-large-size-slowbuffer.js index b4670b4173004b..c4302f7e61b06f 100644 --- a/test/pummel/test-buffer-large-size-slowbuffer.js +++ b/test/pummel/test-buffer-large-size-slowbuffer.js @@ -9,14 +9,22 @@ const { Buffer } = require('node:buffer'); const size = 2 ** 31; +let largeBuffer; + // Test slow Buffer with size larger than integer range try { - assert.throws(() => Buffer.allocUnsafeSlow(size).toString('utf8'), { - code: 'ERR_STRING_TOO_LONG', - }); + largeBuffer = Buffer.allocUnsafeSlow(size); } catch (e) { - if (e.code !== 'ERR_MEMORY_ALLOCATION_FAILED') { - throw e; + if ( + e.code === 'ERR_MEMORY_ALLOCATION_FAILED' || + /Array buffer allocation failed/.test(e.message) + ) { + common.skip('insufficient space for slow Buffer allocation'); } - common.skip('insufficient space for slow Buffer allocation'); + + throw e; } + +assert.throws(() => largeBuffer.toString('utf8'), { + code: 'ERR_STRING_TOO_LONG', +}); diff --git a/test/pummel/test-string-decoder-large-buffer.js b/test/pummel/test-string-decoder-large-buffer.js index e72dfb58b61de4..9a8ba1733dd17e 100644 --- a/test/pummel/test-string-decoder-large-buffer.js +++ b/test/pummel/test-string-decoder-large-buffer.js @@ -17,13 +17,20 @@ const stringTooLongError = { name: 'Error', }; +let largeBuffer; + try { - const buf = Buffer.allocUnsafe(size); - const decoder = new StringDecoder('utf8'); - assert.throws(() => decoder.write(buf), stringTooLongError); + largeBuffer = Buffer.allocUnsafe(size); } catch (e) { - if (e.code !== 'ERR_MEMORY_ALLOCATION_FAILED') { - throw e; + if ( + e.code === 'ERR_MEMORY_ALLOCATION_FAILED' || + /Array buffer allocation failed/.test(e.message) + ) { + common.skip('insufficient space for Buffer.alloc'); } - common.skip('insufficient space for Buffer.alloc'); + + throw e; } + +const decoder = new StringDecoder('utf8'); +assert.throws(() => decoder.write(largeBuffer), stringTooLongError); From fdb2c4b5d1cf903e240f23aeb9c5b141e8a70af0 Mon Sep 17 00:00:00 2001 From: Luigi Pinca Date: Tue, 17 Jun 2025 14:47:11 +0200 Subject: [PATCH 2/2] Update test/pummel/test-string-decoder-large-buffer.js Co-authored-by: Livia Medeiros --- test/pummel/test-string-decoder-large-buffer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/pummel/test-string-decoder-large-buffer.js b/test/pummel/test-string-decoder-large-buffer.js index 9a8ba1733dd17e..0a4001cc936904 100644 --- a/test/pummel/test-string-decoder-large-buffer.js +++ b/test/pummel/test-string-decoder-large-buffer.js @@ -26,7 +26,7 @@ try { e.code === 'ERR_MEMORY_ALLOCATION_FAILED' || /Array buffer allocation failed/.test(e.message) ) { - common.skip('insufficient space for Buffer.alloc'); + common.skip('insufficient space for Buffer.allocUnsafe'); } throw e;