From cce631748d49eb6d9ca0736105f04abb4897f1f9 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Thu, 18 May 2006 12:11:37 +0000 Subject: [PATCH] Win32: Updated various native string handling to use the new _s "secure" variants. --- src/native/common/common_tools.c | 2 +- src/native/win32/display.c | 18 ++++++++++-------- src/native/win32/org_lwjgl_Sys.c | 12 ++++++------ 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/native/common/common_tools.c b/src/native/common/common_tools.c index 8c5d20e7..7b2355b9 100644 --- a/src/native/common/common_tools.c +++ b/src/native/common/common_tools.c @@ -83,7 +83,7 @@ static jstring sprintfJavaString(JNIEnv *env, const char *format, va_list ap) { char buffer[BUFFER_SIZE]; jstring str; #ifdef WIN32 - _vsnprintf(buffer, BUFFER_SIZE, format, ap); + vsnprintf_s(buffer, BUFFER_SIZE, _TRUNCATE, format, ap); #else vsnprintf(buffer, BUFFER_SIZE, format, ap); #endif diff --git a/src/native/win32/display.c b/src/native/win32/display.c index 8efe4268..1bfd10c7 100644 --- a/src/native/win32/display.c +++ b/src/native/win32/display.c @@ -263,9 +263,11 @@ void restoreDisplayMode(void) { jstring getVersion(JNIEnv * env, char *driver) { +#define BUFFER_SIZE 1024 jstring ret = NULL; - TCHAR driverDLL[256] = "\0"; + const char *dll_ext = ".dll"; + TCHAR driverDLL[BUFFER_SIZE] = "\0"; DWORD var = 0; DWORD dwInfoSize; LPVOID lpInfoBuff; @@ -274,8 +276,8 @@ jstring getVersion(JNIEnv * env, char *driver) if (driver == NULL) { return NULL; } - strcat(driverDLL, driver); - strcat(driverDLL, ".dll"); + strncat_s(driverDLL, BUFFER_SIZE, driver, strlen(driver)); + strncat_s(driverDLL, BUFFER_SIZE, dll_ext, strlen(dll_ext)); dwInfoSize = GetFileVersionInfoSize(driverDLL, &var); lpInfoBuff = malloc(dwInfoSize); bRetval = GetFileVersionInfo(driverDLL, 0, dwInfoSize, lpInfoBuff); @@ -286,11 +288,11 @@ jstring getVersion(JNIEnv * env, char *driver) UINT uiLen = 0; bRetval = VerQueryValue(lpInfoBuff, TEXT("\\"), (void **) &fxdFileInfo, &uiLen); if (bRetval != 0) { - TCHAR version[256]; - TCHAR ms[10], ls[10]; - sprintf(ms, "%d.%d\0", fxdFileInfo->dwProductVersionMS >> 16, fxdFileInfo->dwProductVersionMS & 0xFFFF); - sprintf(ls, "%d.%d\0", fxdFileInfo->dwProductVersionLS >> 16, fxdFileInfo->dwProductVersionLS & 0xFFFF); - sprintf(version, "%s.%s\0", ms, ls); + TCHAR version[BUFFER_SIZE]; + TCHAR ms[BUFFER_SIZE], ls[BUFFER_SIZE]; + _snprintf_s(ms, BUFFER_SIZE, _TRUNCATE, "%d.%d\0", fxdFileInfo->dwProductVersionMS >> 16, fxdFileInfo->dwProductVersionMS & 0xFFFF); + _snprintf_s(ls, BUFFER_SIZE, _TRUNCATE, "%d.%d\0", fxdFileInfo->dwProductVersionLS >> 16, fxdFileInfo->dwProductVersionLS & 0xFFFF); + _snprintf_s(version, BUFFER_SIZE, _TRUNCATE, "%s.%s\0", ms, ls); ret = NewStringNative(env, version); } } diff --git a/src/native/win32/org_lwjgl_Sys.c b/src/native/win32/org_lwjgl_Sys.c index b11ba7ba..37ff9190 100644 --- a/src/native/win32/org_lwjgl_Sys.c +++ b/src/native/win32/org_lwjgl_Sys.c @@ -101,15 +101,17 @@ JNIEXPORT void JNICALL Java_org_lwjgl_NativeSysImplementation_alert JNIEXPORT jboolean JNICALL Java_org_lwjgl_NativeSysImplementation_openURL (JNIEnv * env, jobject ignored, jstring url) { +#define BUFFER_SIZE 1024 + const char *std_args = "rundll32 url.dll,FileProtocolHandler "; STARTUPINFO si; PROCESS_INFORMATION pi; char * urlString = GetStringNativeChars(env, url); - char command[256]; - strcpy(command, ""); - strcat(command, "rundll32 url.dll,FileProtocolHandler "); - strncat(command, urlString, 200); // Prevent buffer overflow + char command[BUFFER_SIZE]; + strncpy_s(command, BUFFER_SIZE, "", 1); + strncat_s(command, BUFFER_SIZE, std_args, _TRUNCATE); + strncat_s(command, BUFFER_SIZE, urlString, _TRUNCATE); free(urlString); ZeroMemory( &si, sizeof(si) ); @@ -140,8 +142,6 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_NativeSysImplementation_openURL return JNI_TRUE; } - - const void * getClipboard(int type) {