telnet.c: check sscanf results before passing them to snprintf
authorMarc Hoersken <info@marc-hoersken.de>
Sat, 19 Apr 2014 13:23:04 +0000 (15:23 +0200)
committerMarc Hoersken <info@marc-hoersken.de>
Sat, 19 Apr 2014 13:23:04 +0000 (15:23 +0200)
lib/telnet.c

index f8946f4..1f03a00 100644 (file)
@@ -932,8 +932,8 @@ static void suboption(struct connectdata *conn)
   size_t len;
   size_t tmplen;
   int err;
-  char varname[128];
-  char varval[128];
+  char varname[128] = "";
+  char varval[128] = "";
   struct SessionHandle *data = conn->data;
   struct TELNET *tn = (struct TELNET *)data->req.protop;
 
@@ -973,11 +973,12 @@ static void suboption(struct connectdata *conn)
         tmplen = (strlen(v->data) + 1);
         /* Add the variable only if it fits */
         if(len + tmplen < (int)sizeof(temp)-6) {
-          sscanf(v->data, "%127[^,],%127s", varname, varval);
-          snprintf((char *)&temp[len], sizeof(temp) - len,
-                   "%c%s%c%s", CURL_NEW_ENV_VAR, varname,
-                   CURL_NEW_ENV_VALUE, varval);
-          len += tmplen;
+          if(sscanf(v->data, "%127[^,],%127s", varname, varval)) {
+            snprintf((char *)&temp[len], sizeof(temp) - len,
+                     "%c%s%c%s", CURL_NEW_ENV_VAR, varname,
+                     CURL_NEW_ENV_VALUE, varval);
+            len += tmplen;
+          }
         }
       }
       snprintf((char *)&temp[len], sizeof(temp) - len,