Mercurial > dwindows
diff gtk3/dw.c @ 2063:f7c462f27829
GTK: Update ancient unsafe code in dw_environment_query() on Unix.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Mon, 20 Apr 2020 19:22:37 +0000 |
parents | 9c400365f269 |
children | 2c2530f8cbef |
line wrap: on
line diff
--- 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;z<len;z++) - { - if(tempbuf[z] == '.') - { - tempbuf[z] = '\0'; - env->MajorVersion = 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; } /*