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 584beaa

Browse filesBrowse files
joyeecheungmarco-ippolito
authored andcommitted
src: zero-initialize data that are copied into the snapshot
To prevent padding from making the snapshot unreproducible, zero-initialize the data that are copied into the snapshot so that the padding copied are all zeros. This is better than enlarging the enums to align the fields since it doesn't make the snapshot bigger than necessary, and it removes the need of using static assertions to ensure alignment. PR-URL: #53563 Refs: #50983 Reviewed-By: Chengzhong Wu <legendecas@gmail.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de> Reviewed-By: Richard Lau <rlau@redhat.com> Reviewed-By: Daniel Lemire <daniel@lemire.me> Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent 229f7f8 commit 584beaa
Copy full SHA for 584beaa

2 files changed

+4-1Lines changed: 4 additions & 1 deletion

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎src/node_snapshotable.cc‎

Copy file name to clipboardExpand all lines: src/node_snapshotable.cc
+3-1Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1357,9 +1357,11 @@ StartupData SerializeNodeContextInternalFields(Local<Object> holder,
13571357
// To serialize the type field, save data in a EmbedderTypeInfo.
13581358
if (index == BaseObject::kEmbedderType) {
13591359
int size = sizeof(EmbedderTypeInfo);
1360-
char* data = new char[size];
13611360
// We need to use placement new because V8 calls delete[] on the returned
13621361
// data.
1362+
// The () syntax at the end would zero-initialize the block and make
1363+
// the padding reproducible.
1364+
char* data = new char[size]();
13631365
// TODO(joyeecheung): support cppgc objects.
13641366
new (data) EmbedderTypeInfo(obj->type(),
13651367
EmbedderTypeInfo::MemoryMode::kBaseObject);
Collapse file

‎src/node_snapshotable.h‎

Copy file name to clipboardExpand all lines: src/node_snapshotable.h
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ struct InternalFieldInfoBase {
4747
std::is_same_v<InternalFieldInfoBase, T>,
4848
"Can only accept InternalFieldInfoBase subclasses");
4949
void* buf = ::operator new[](sizeof(T));
50+
memset(buf, 0, sizeof(T)); // Make the padding reproducible.
5051
T* result = new (buf) T;
5152
result->type = type;
5253
result->length = sizeof(T);

0 commit comments

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