Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 87f3f5a

Browse filesBrowse files
committed
test: plug AliasedBuffer cctest memory leak
No need to heap-allocate values here. PR-URL: #20665 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
1 parent 57dfd64 commit 87f3f5a
Copy full SHA for 87f3f5a

File tree

Expand file treeCollapse file tree

1 file changed

+37
-42
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

1 file changed

+37
-42
lines changed
Open diff view settings
Collapse file

‎test/cctest/test_aliased_buffer.cc‎

Copy file name to clipboardExpand all lines: test/cctest/test_aliased_buffer.cc
+37-42Lines changed: 37 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,26 @@ using node::AliasedBuffer;
88
class AliasBufferTest : public NodeTestFixture {};
99

1010
template<class NativeT>
11-
void CreateOracleValues(NativeT* buf, size_t count) {
12-
for (size_t i = 0, j = count; i < count; i++, j--) {
13-
buf[i] = static_cast<NativeT>(j);
11+
void CreateOracleValues(std::vector<NativeT>* buf) {
12+
for (size_t i = 0, j = buf->size(); i < buf->size(); i++, j--) {
13+
(*buf)[i] = static_cast<NativeT>(j);
1414
}
1515
}
1616

1717
template<class NativeT, class V8T>
1818
void WriteViaOperator(AliasedBuffer<NativeT, V8T>* aliasedBuffer,
19-
size_t size,
20-
NativeT* oracle) {
19+
const std::vector<NativeT>& oracle) {
2120
// write through the API
22-
for (size_t i = 0; i < size; i++) {
21+
for (size_t i = 0; i < oracle.size(); i++) {
2322
(*aliasedBuffer)[i] = oracle[i];
2423
}
2524
}
2625

2726
template<class NativeT, class V8T>
2827
void WriteViaSetValue(AliasedBuffer<NativeT, V8T>* aliasedBuffer,
29-
size_t size,
30-
NativeT* oracle) {
28+
const std::vector<NativeT>& oracle) {
3129
// write through the API
32-
for (size_t i = 0; i < size; i++) {
30+
for (size_t i = 0; i < oracle.size(); i++) {
3331
aliasedBuffer->SetValue(i, oracle[i]);
3432
}
3533
}
@@ -38,27 +36,26 @@ template<class NativeT, class V8T>
3836
void ReadAndValidate(v8::Isolate* isolate,
3937
v8::Local<v8::Context> context,
4038
AliasedBuffer<NativeT, V8T>* aliasedBuffer,
41-
size_t size,
42-
NativeT* oracle) {
39+
const std::vector<NativeT>& oracle) {
4340
// read through the API
44-
for (size_t i = 0; i < size; i++) {
41+
for (size_t i = 0; i < oracle.size(); i++) {
4542
NativeT v1 = (*aliasedBuffer)[i];
4643
NativeT v2 = aliasedBuffer->GetValue(i);
4744
EXPECT_TRUE(v1 == oracle[i]);
4845
EXPECT_TRUE(v2 == oracle[i]);
4946
}
5047

5148
// validate size of JS Buffer
52-
EXPECT_TRUE(aliasedBuffer->GetJSArray()->Length() == size);
49+
EXPECT_TRUE(aliasedBuffer->GetJSArray()->Length() == oracle.size());
5350
EXPECT_TRUE(
5451
aliasedBuffer->GetJSArray()->ByteLength() ==
55-
(size * sizeof(NativeT)));
52+
(oracle.size() * sizeof(NativeT)));
5653

5754
// validate operator * and GetBuffer are the same
5855
EXPECT_TRUE(aliasedBuffer->GetNativeBuffer() == *(*aliasedBuffer));
5956

6057
// read through the JS API
61-
for (size_t i = 0; i < size; i++) {
58+
for (size_t i = 0; i < oracle.size(); i++) {
6259
v8::Local<V8T> v8TypedArray = aliasedBuffer->GetJSArray();
6360
v8::MaybeLocal<v8::Value> v = v8TypedArray->Get(context, i);
6461
EXPECT_TRUE(v.IsEmpty() == false);
@@ -80,21 +77,19 @@ void ReadWriteTest(v8::Isolate* isolate) {
8077

8178
const size_t size = 100;
8279
AliasedBuffer<NativeT, V8T> ab(isolate, size);
83-
NativeT* oracle = new NativeT[size];
84-
CreateOracleValues(oracle, size);
85-
WriteViaOperator(&ab, size, oracle);
86-
ReadAndValidate(isolate, context, &ab, size, oracle);
80+
std::vector<NativeT> oracle(size);
81+
CreateOracleValues(&oracle);
82+
WriteViaOperator(&ab, oracle);
83+
ReadAndValidate(isolate, context, &ab, oracle);
8784

88-
WriteViaSetValue(&ab, size, oracle);
85+
WriteViaSetValue(&ab, oracle);
8986

9087
// validate copy constructor
9188
{
9289
AliasedBuffer<NativeT, V8T> ab2(ab);
93-
ReadAndValidate(isolate, context, &ab2, size, oracle);
90+
ReadAndValidate(isolate, context, &ab2, oracle);
9491
}
95-
ReadAndValidate(isolate, context, &ab, size, oracle);
96-
97-
delete[] oracle;
92+
ReadAndValidate(isolate, context, &ab, oracle);
9893
}
9994

10095
template<
@@ -124,28 +119,28 @@ void SharedBufferTest(
124119
AliasedBuffer<NativeT_C, V8T_C> ab_C(
125120
isolate, sizeInBytes_A + sizeInBytes_B, count_C, rootBuffer);
126121

127-
NativeT_A* oracle_A = new NativeT_A[count_A];
128-
NativeT_B* oracle_B = new NativeT_B[count_B];
129-
NativeT_C* oracle_C = new NativeT_C[count_C];
130-
CreateOracleValues(oracle_A, count_A);
131-
CreateOracleValues(oracle_B, count_B);
132-
CreateOracleValues(oracle_C, count_C);
122+
std::vector<NativeT_A> oracle_A(count_A);
123+
std::vector<NativeT_B> oracle_B(count_B);
124+
std::vector<NativeT_C> oracle_C(count_C);
125+
CreateOracleValues(&oracle_A);
126+
CreateOracleValues(&oracle_B);
127+
CreateOracleValues(&oracle_C);
133128

134-
WriteViaOperator(&ab_A, count_A, oracle_A);
135-
WriteViaOperator(&ab_B, count_B, oracle_B);
136-
WriteViaOperator(&ab_C, count_C, oracle_C);
129+
WriteViaOperator(&ab_A, oracle_A);
130+
WriteViaOperator(&ab_B, oracle_B);
131+
WriteViaOperator(&ab_C, oracle_C);
137132

138-
ReadAndValidate(isolate, context, &ab_A, count_A, oracle_A);
139-
ReadAndValidate(isolate, context, &ab_B, count_B, oracle_B);
140-
ReadAndValidate(isolate, context, &ab_C, count_C, oracle_C);
133+
ReadAndValidate(isolate, context, &ab_A, oracle_A);
134+
ReadAndValidate(isolate, context, &ab_B, oracle_B);
135+
ReadAndValidate(isolate, context, &ab_C, oracle_C);
141136

142-
WriteViaSetValue(&ab_A, count_A, oracle_A);
143-
WriteViaSetValue(&ab_B, count_B, oracle_B);
144-
WriteViaSetValue(&ab_C, count_C, oracle_C);
137+
WriteViaSetValue(&ab_A, oracle_A);
138+
WriteViaSetValue(&ab_B, oracle_B);
139+
WriteViaSetValue(&ab_C, oracle_C);
145140

146-
ReadAndValidate(isolate, context, &ab_A, count_A, oracle_A);
147-
ReadAndValidate(isolate, context, &ab_B, count_B, oracle_B);
148-
ReadAndValidate(isolate, context, &ab_C, count_C, oracle_C);
141+
ReadAndValidate(isolate, context, &ab_A, oracle_A);
142+
ReadAndValidate(isolate, context, &ab_B, oracle_B);
143+
ReadAndValidate(isolate, context, &ab_C, oracle_C);
149144
}
150145

151146
TEST_F(AliasBufferTest, Uint8Array) {

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.