Skip to content

Commit b097419

Browse files
committed
fix: harden CoverageMap env var parsing and validation
Properly parse JAZZER_MAX_NUM_COUNTERS with trimming, reject negative values with a clear error message, and cap INITIAL_NUM_COUNTERS at MAX_NUM_COUNTERS to prevent out-of-bounds registration.
1 parent 51cc23b commit b097419

1 file changed

Lines changed: 21 additions & 5 deletions

File tree

src/main/java/com/code_intelligence/jazzer/runtime/CoverageMap.java

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,9 @@ public final class CoverageMap {
3939

4040
private static final String ENV_MAX_NUM_COUNTERS = "JAZZER_MAX_NUM_COUNTERS";
4141

42-
private static final int MAX_NUM_COUNTERS =
43-
System.getenv(ENV_MAX_NUM_COUNTERS) != null
44-
? Integer.parseInt(System.getenv(ENV_MAX_NUM_COUNTERS))
45-
: 1 << 20;
42+
private static final int DEFAULT_MAX_NUM_COUNTERS = 1 << 20;
43+
44+
private static final int MAX_NUM_COUNTERS = initMaxNumCounters();
4645

4746
private static final Unsafe UNSAFE = UnsafeProvider.getUnsafe();
4847
private static final Class<?> LOG;
@@ -82,7 +81,7 @@ public final class CoverageMap {
8281
private static final int INITIAL_NUM_COUNTERS = 1 << 9;
8382

8483
static {
85-
registerNewCounters(0, INITIAL_NUM_COUNTERS);
84+
registerNewCounters(0, Math.min(INITIAL_NUM_COUNTERS, MAX_NUM_COUNTERS));
8685
}
8786

8887
/**
@@ -174,4 +173,21 @@ private static void logError(String message, Throwable t) {
174173
private static native void initialize(long countersAddress);
175174

176175
private static native void registerNewCounters(int oldNumCounters, int newNumCounters);
176+
177+
private static int initMaxNumCounters() {
178+
String value = System.getenv(ENV_MAX_NUM_COUNTERS);
179+
if (value == null || value.isEmpty()) {
180+
return DEFAULT_MAX_NUM_COUNTERS;
181+
}
182+
try {
183+
int parsed = Integer.parseInt(value.trim());
184+
if (parsed < 0) {
185+
throw new IllegalArgumentException(
186+
ENV_MAX_NUM_COUNTERS + " must not be negative, got: " + parsed);
187+
}
188+
return parsed;
189+
} catch (NumberFormatException e) {
190+
return DEFAULT_MAX_NUM_COUNTERS;
191+
}
192+
}
177193
}

0 commit comments

Comments
 (0)