diff options
Diffstat (limited to 'src/share/bin/java.c')
-rw-r--r-- | src/share/bin/java.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/share/bin/java.c b/src/share/bin/java.c index 73c532676..ed45f085d 100644 --- a/src/share/bin/java.c +++ b/src/share/bin/java.c @@ -732,6 +732,9 @@ SetClassPath(const char *s) if (s == NULL) return; s = JLI_WildcardExpandClasspath(s); + if (sizeof(format) - 2 + JLI_StrLen(s) < JLI_StrLen(s)) + // s is corrupted after wildcard expansion + return; def = JLI_MemAlloc(sizeof(format) - 2 /* strlen("%s") */ + JLI_StrLen(s)); @@ -1351,9 +1354,11 @@ AddApplicationOptions(int cpathc, const char **cpathv) if (s) { s = (char *) JLI_WildcardExpandClasspath(s); /* 40 for -Denv.class.path= */ - envcp = (char *)JLI_MemAlloc(JLI_StrLen(s) + 40); - sprintf(envcp, "-Denv.class.path=%s", s); - AddOption(envcp, NULL); + if (JLI_StrLen(s) + 40 > JLI_StrLen(s)) { // Safeguard from overflow + envcp = (char *)JLI_MemAlloc(JLI_StrLen(s) + 40); + sprintf(envcp, "-Denv.class.path=%s", s); + AddOption(envcp, NULL); + } } } |