# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1587410557 0 # Node ID f7c462f278293a75c428dd8283780ab5cb5f21a0 # Parent 1a93c508bb51e2e1e89ecb533c72e8cabf9c11f0 GTK: Update ancient unsafe code in dw_environment_query() on Unix. diff -r 1a93c508bb51 -r f7c462f27829 gtk/dw.c --- a/gtk/dw.c Fri Apr 17 20:45:31 2020 +0000 +++ b/gtk/dw.c Mon Apr 20 19:22:37 2020 +0000 @@ -12306,19 +12306,15 @@ void dw_environment_query(DWEnv *env) { struct utsname name; - char tempbuf[100]; - int len, z; + char tempbuf[100] = { 0 }, *dot; uname(&name); - strcpy(env->osName, name.sysname); - strcpy(tempbuf, name.release); - - env->MajorBuild = env->MinorBuild = 0; - - len = strlen(tempbuf); - - strcpy(env->buildDate, __DATE__); - strcpy(env->buildTime, __TIME__); + memset(env, '\0', sizeof(DWEnv)); + strncpy(env->osName, name.sysname, sizeof(env->osName)-1); + strncpy(tempbuf, name.release, 99); + + strncpy(env->buildDate, __DATE__, sizeof(env->buildDate)-1); + strncpy(env->buildTime, __TIME__, sizeof(env->buildTime)-1); env->DWMajorVersion = DW_MAJOR_VERSION; env->DWMinorVersion = DW_MINOR_VERSION; #ifdef VER_REV @@ -12327,18 +12323,14 @@ env->DWSubVersion = DW_SUB_VERSION; #endif - for(z=1;zMajorVersion = atoi(&tempbuf[z-1]); - env->MinorVersion = atoi(&tempbuf[z+1]); - return; - } + if((dot = strchr(tempbuf, '.')) != NULL) + { + *dot = '\0'; + env->MajorVersion = atoi(tempbuf); + env->MinorVersion = atoi(&dot[1]); + return; } env->MajorVersion = atoi(tempbuf); - env->MinorVersion = 0; } #if GTK_MAJOR_VERSION < 2 diff -r 1a93c508bb51 -r f7c462f27829 gtk3/dw.c --- a/gtk3/dw.c Fri Apr 17 20:45:31 2020 +0000 +++ b/gtk3/dw.c Mon Apr 20 19:22:37 2020 +0000 @@ -11010,19 +11010,15 @@ void dw_environment_query(DWEnv *env) { struct utsname name; - char tempbuf[100]; - int len, z; + char tempbuf[100] = { 0 }, *dot; uname(&name); - strcpy(env->osName, name.sysname); - strcpy(tempbuf, name.release); - - env->MajorBuild = env->MinorBuild = 0; - - len = strlen(tempbuf); - - strcpy(env->buildDate, __DATE__); - strcpy(env->buildTime, __TIME__); + memset(env, '\0', sizeof(DWEnv)); + strncpy(env->osName, name.sysname, sizeof(env->osName)-1); + strncpy(tempbuf, name.release, 99); + + strncpy(env->buildDate, __DATE__, sizeof(env->buildDate)-1); + strncpy(env->buildTime, __TIME__, sizeof(env->buildTime)-1); env->DWMajorVersion = DW_MAJOR_VERSION; env->DWMinorVersion = DW_MINOR_VERSION; #ifdef VER_REV @@ -11031,18 +11027,14 @@ env->DWSubVersion = DW_SUB_VERSION; #endif - for(z=1;zMajorVersion = atoi(&tempbuf[z-1]); - env->MinorVersion = atoi(&tempbuf[z+1]); - return; - } + if((dot = strchr(tempbuf, '.')) != NULL) + { + *dot = '\0'; + env->MajorVersion = atoi(tempbuf); + env->MinorVersion = atoi(&dot[1]); + return; } env->MajorVersion = atoi(tempbuf); - env->MinorVersion = 0; } /*