Skip to content

Commit 42c5544

Browse files
Asaf-Federmanaduh95
authored andcommitted
src: assert memory calc for max-old-space-size-percentage
Add validation to ensure that --max-old-space-size-percentage cannot be used when available memory cannot be calculated, preventing undefined behavior when memory detection fails. Also enhance test-process-constrained-memory.js to support testing in constrained environments where memory calculation may fail. PR-URL: #59460 Backport-PR-URL: #59631 Reviewed-By: theanarkh <theratliter@gmail.com> Reviewed-By: Moshe Atlow <moshe@atlow.co.il>
1 parent 686ac49 commit 42c5544

2 files changed

Lines changed: 13 additions & 3 deletions

File tree

‎src/node_options.cc‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,11 @@ void PerIsolateOptions::HandleMaxOldSpaceSizePercentage(
134134
? constrained_memory
135135
: total_memory;
136136

137+
if (available_memory == 0) {
138+
errors->push_back("the available memory can not be calculated");
139+
return;
140+
}
141+
137142
// Convert to MB and calculate the percentage
138143
uint64_t memory_mb = available_memory / (1024 * 1024);
139144
uint64_t calculated_mb = static_cast<size_t>(memory_mb * percentage / 100.0);

‎test/parallel/test-max-old-space-size-percentage.js‎

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,14 +119,19 @@ assert(
119119

120120
// Validate heap sizes against system memory
121121
consttotalMemoryMB=Math.floor(os.totalmem()/1024/1024);
122-
constmargin=10;// 5% margin
122+
constuint64Max=2**64-1;
123+
constconstrainedMemory=process.constrainedMemory();
124+
constconstrainedMemoryMB=Math.floor(constrainedMemory/1024/1024);
125+
consteffectiveMemoryMB=
126+
constrainedMemory>0&&constrainedMemory!==uint64Max ? constrainedMemoryMB : totalMemoryMB;
127+
constmargin=10;// 10% margin
123128
testPercentages.forEach((percentage)=>{
124-
constupperLimit=totalMemoryMB*((percentage+margin)/100);
129+
constupperLimit=effectiveMemoryMB*((percentage+margin)/100);
125130
assert(
126131
heapSizes[percentage]<=upperLimit,
127132
`Heap size for ${percentage}% (${heapSizes[percentage]} MB) should not exceed upper limit (${upperLimit} MB)`
128133
);
129-
constlowerLimit=totalMemoryMB*((percentage-margin)/100);
134+
constlowerLimit=effectiveMemoryMB*((percentage-margin)/100);
130135
assert(
131136
heapSizes[percentage]>=lowerLimit,
132137
`Heap size for ${percentage}% (${heapSizes[percentage]} MB) should not be less than lower limit (${lowerLimit} MB)`

0 commit comments

Comments
 (0)