From 328a3926fa737ffc34ab6f649dba245b1448ffa7 Mon Sep 17 00:00:00 2001 From: ksrini Date: Fri, 9 Nov 2012 14:36:10 -0800 Subject: [PATCH] 8002091: tools/launcher/ToolsOpts.java test started to fail since 7u11 b01 on Windows Reviewed-by: darcy, jjh, mschoene --- src/share/bin/jli_util.h | 2 +- src/windows/bin/java_md.c | 37 +++++++++++++++++++----------- test/tools/launcher/ToolsOpts.java | 1 + 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/share/bin/jli_util.h b/src/share/bin/jli_util.h index dd53e9362..388910407 100644 --- a/src/share/bin/jli_util.h +++ b/src/share/bin/jli_util.h @@ -66,7 +66,7 @@ int JLI_GetStdArgc(); #include #define JLI_StrCaseCmp(p1, p2) stricmp((p1), (p2)) #define JLI_StrNCaseCmp(p1, p2, p3) strnicmp((p1), (p2), (p3)) -size_t JLI_Snprintf(char *buffer, size_t size, const char *format, ...); +int JLI_Snprintf(char *buffer, size_t size, const char *format, ...); void JLI_CmdToArgs(char *cmdline); #define JLI_Lseek _lseeki64 #else /* NIXES */ diff --git a/src/windows/bin/java_md.c b/src/windows/bin/java_md.c index df1187172..4078ecc75 100644 --- a/src/windows/bin/java_md.c +++ b/src/windows/bin/java_md.c @@ -526,27 +526,35 @@ jlong Counter2Micros(jlong counts) } return (counts * 1000 * 1000)/counterFrequency.QuadPart; } - /* * windows snprintf does not guarantee a null terminator in the buffer, * if the computed size is equal to or greater than the buffer size, - * as well as error conditions, this function guarantees a null terminator - * under all these conditions. An unreasonable buffer size will return - * an error value. + * as well as error conditions. This function guarantees a null terminator + * under all these conditions. An unreasonable buffer or size will return + * an error value. Under all other conditions this function will return the + * size of the bytes actually written minus the null terminator, similar + * to ansi snprintf api. Thus when calling this function the caller must + * ensure storage for the null terminator. */ -size_t -JLI_Snprintf(char* buffer, size_t size, const char* format, ...) -{ - size_t rc; +int +JLI_Snprintf(char* buffer, size_t size, const char* format, ...) { + int rc; va_list vl; - if (size <= 0) + if (size == 0 || buffer == NULL) return -1; + buffer[0] = '\0'; va_start(vl, format); - rc = vsnprintf(buffer, size - 1, format, vl); + rc = vsnprintf(buffer, size, format, vl); + va_end(vl); /* force a null terminator, if something is amiss */ - if (rc < 0 || rc >= size) + if (rc < 0) { + /* apply ansi semantics */ buffer[size - 1] = '\0'; - va_end(vl); + return size; + } else if (rc == size) { + /* force a null terminator */ + buffer[size - 1] = '\0'; + } return rc; } @@ -1441,7 +1449,10 @@ CreateApplicationArgs(JNIEnv *env, char **strv, int argc) // we add the indicator tlen = 1 + JLI_StrLen(strv[i]) + 1; nargv[i] = (char *) JLI_MemAlloc(tlen); - JLI_Snprintf(nargv[i], tlen, "%c%s", arg_expand ? 'T' : 'F', strv[i]); + if (JLI_Snprintf(nargv[i], tlen, "%c%s", arg_expand ? 'T' : 'F', + strv[i]) < 0) { + return NULL; + } JLI_TraceLauncher("%s\n", nargv[i]); } diff --git a/test/tools/launcher/ToolsOpts.java b/test/tools/launcher/ToolsOpts.java index 4535990db..f01931d54 100644 --- a/test/tools/launcher/ToolsOpts.java +++ b/test/tools/launcher/ToolsOpts.java @@ -23,6 +23,7 @@ /* * @test + * @bug 8002091 * @summary Test options patterns for javac,javah,javap and javadoc using * javac as a test launcher. Create a dummy javac and intercept options to check * reception of options as passed through the launcher without having to launch -- GitLab