Skip to content

Commit acada1f

Browse files
Renegade334targos
authored andcommitted
inspector: ensure adequate memory allocation for Binary::toBase64
PR-URL: #59870 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Chengzhong Wu <legendecas@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent 83ae610 commit acada1f

File tree

2 files changed

+23
-9
lines changed

2 files changed

+23
-9
lines changed

src/inspector/node_string.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,15 +108,15 @@ size_t StringUtil::CharacterCount(const std::string_view s) {
108108
}
109109

110110
String Binary::toBase64() const {
111-
MaybeStackBuffer<char> buffer;
112-
size_t str_len = simdutf::base64_length_from_binary(bytes_->size());
113-
buffer.SetLength(str_len);
111+
size_t expected_base64_length =
112+
simdutf::base64_length_from_binary(bytes_->size());
113+
MaybeStackBuffer<char> buffer(expected_base64_length);
114114

115115
size_t len =
116116
simdutf::binary_to_base64(reinterpret_cast<const char*>(bytes_->data()),
117117
bytes_->size(),
118118
buffer.out());
119-
CHECK_EQ(len, str_len);
119+
CHECK_EQ(len, expected_base64_length);
120120
return buffer.ToString();
121121
}
122122

test/parallel/test-inspector-network-data-received.js

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ const assert = require('node:assert');
1111
const { waitUntil } = require('../common/inspector-helper');
1212
const { setTimeout } = require('node:timers/promises');
1313

14+
// The complete payload string received by the network agent
15+
const payloadString = `Hello, world${'.'.repeat(4096)}`;
16+
1417
const session = new inspector.Session();
1518
session.connect();
1619
session.post('Network.enable');
@@ -67,9 +70,20 @@ async function triggerNetworkEvents(requestId, charset) {
6770
});
6871
await setTimeout(1);
6972

70-
Network.loadingFinished({
73+
// Test inspector binary conversions with large input
74+
const chunk3 = Buffer.allocUnsafe(4096).fill('.');
75+
Network.dataReceived({
7176
requestId,
7277
timestamp: 5,
78+
dataLength: chunk3.byteLength,
79+
encodedDataLength: chunk3.byteLength,
80+
data: chunk3,
81+
});
82+
await setTimeout(1);
83+
84+
Network.loadingFinished({
85+
requestId,
86+
timestamp: 6,
7387
});
7488
}
7589

@@ -116,7 +130,7 @@ test('should stream Network.dataReceived with data chunks', async () => {
116130

117131
const data = Buffer.concat(chunks);
118132
assert.strictEqual(data.byteLength, totalDataLength, data);
119-
assert.strictEqual(data.toString('utf8'), 'Hello, world');
133+
assert.strictEqual(data.toString('utf8'), payloadString);
120134
});
121135

122136
test('Network.streamResourceContent should send all buffered chunks', async () => {
@@ -131,7 +145,7 @@ test('Network.streamResourceContent should send all buffered chunks', async () =
131145
const { bufferedData } = await session.post('Network.streamResourceContent', {
132146
requestId,
133147
});
134-
assert.strictEqual(Buffer.from(bufferedData, 'base64').toString('utf8'), 'Hello, world');
148+
assert.strictEqual(Buffer.from(bufferedData, 'base64').toString('utf8'), payloadString);
135149
});
136150

137151
test('Network.streamResourceContent should reject if request id not found', async () => {
@@ -158,7 +172,7 @@ test('Network.getResponseBody should send all buffered binary data', async () =>
158172
requestId,
159173
});
160174
assert.strictEqual(base64Encoded, true);
161-
assert.strictEqual(body, Buffer.from('Hello, world').toString('base64'));
175+
assert.strictEqual(body, Buffer.from(payloadString).toString('base64'));
162176
});
163177

164178
test('Network.getResponseBody should send all buffered text data', async () => {
@@ -174,5 +188,5 @@ test('Network.getResponseBody should send all buffered text data', async () => {
174188
requestId,
175189
});
176190
assert.strictEqual(base64Encoded, false);
177-
assert.strictEqual(body, 'Hello, world');
191+
assert.strictEqual(body, payloadString);
178192
});

0 commit comments

Comments
 (0)