changeset 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 1a93c508bb51
children 19fb7f72051b
files gtk/dw.c gtk3/dw.c
diffstat 2 files changed, 26 insertions(+), 42 deletions(-) [+]
line wrap: on
line diff
--- 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;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;
 }
 
 #if GTK_MAJOR_VERSION < 2
--- 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;
 }
 
 /*