Skip to content

Commit af91d7d

Browse files
committed
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.
1 parent 5c40956 commit af91d7d

File tree

2 files changed

+2
-0
lines changed

2 files changed

+2
-0
lines changed

src/node_snapshotable.cc

+1
Original file line numberDiff line numberDiff line change
@@ -1416,6 +1416,7 @@ StartupData SerializeNodeContextInternalFields(Local<Object> holder,
14161416
if (index == BaseObject::kEmbedderType) {
14171417
int size = sizeof(EmbedderTypeInfo);
14181418
char* data = new char[size];
1419+
memset(data, 0, size); // Make the padding reproducible.
14191420
// We need to use placement new because V8 calls delete[] on the returned
14201421
// data.
14211422
// TODO(joyeecheung): support cppgc objects.

src/node_snapshotable.h

+1
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)