Mon Apr 28 17:27:40 1997 Michael Snyder <msnyder@cleaver.cygnus.com>
authorMichael Snyder <msnyder@vmware.com>
Tue, 29 Apr 1997 01:02:37 +0000 (01:02 +0000)
committerMichael Snyder <msnyder@vmware.com>
Tue, 29 Apr 1997 01:02:37 +0000 (01:02 +0000)
        * c-exp.y, java-exp.y: make parse_number reject "123DEADBEEF".
        (fix by Bob Manson).

gdb/ChangeLog
gdb/c-exp.y
gdb/java-exp.y

index 0ec5ca9e4e8d68ae748b9854f7dacad742001368..73eeb5e106dbce4f2b25ca1ad16ab3da194b9642 100644 (file)
@@ -1,5 +1,7 @@
 Mon Apr 28 17:27:40 1997  Michael Snyder  <msnyder@cleaver.cygnus.com>
 
+       * c-exp.y, java-exp.y: make parse_number reject "123DEADBEEF".
+       (fix by Bob Manson).
        * top.c: change "to enable to enable" to "to enable" in a couple
        of help strings.
 
index a70691fce97fc96dc02562fbf0ea83fb82bff038..a3bbad2960055b696aae9c94a0c56dfc0bc328fc 100644 (file)
@@ -933,28 +933,32 @@ parse_number (p, len, parsed_float, putithere)
 
   if (parsed_float)
     {
-      char c;
-
       /* It's a float since it contains a point or an exponent.  */
+      char c;
+      int num = 0;     /* number of tokens scanned by scanf */
+      char saved_char = p[len];
 
+      p[len] = 0;      /* null-terminate the token */
       if (sizeof (putithere->typed_val_float.dval) <= sizeof (float))
-       sscanf (p, "%g", &putithere->typed_val_float.dval);
+       num = sscanf (p, "%g%c", &putithere->typed_val_float.dval,&c);
       else if (sizeof (putithere->typed_val_float.dval) <= sizeof (double))
-       sscanf (p, "%lg", &putithere->typed_val_float.dval);
+       num = sscanf (p, "%lg%c", &putithere->typed_val_float.dval,&c);
       else
        {
 #ifdef PRINTF_HAS_LONG_DOUBLE
-         sscanf (p, "%Lg", &putithere->typed_val_float.dval);
+         num = sscanf (p, "%Lg%c", &putithere->typed_val_float.dval,&c);
 #else
          /* Scan it into a double, then assign it to the long double.
             This at least wins with values representable in the range
             of doubles. */
          double temp;
-         sscanf (p, "%lg", &temp);
+         num = sscanf (p, "%lg%c", &temp,&c);
          putithere->typed_val_float.dval = temp;
 #endif
        }
-
+      p[len] = saved_char;     /* restore the input stream */
+      if (num != 1)            /* check scanf found ONLY a float ... */
+       return ERROR;
       /* See if it has `f' or `l' suffix (float or long double).  */
 
       c = tolower (p[len - 1]);
index 0f27cbd4c27088e29fcfd796359784aaa0cd171d..fd6db48695fd7f6f34b0987c95256ea45a0e6f4e 100644 (file)
@@ -646,25 +646,31 @@ parse_number (p, len, parsed_float, putithere)
   if (parsed_float)
     {
       /* It's a float since it contains a point or an exponent.  */
+      char c;
+      int num = 0;     /* number of tokens scanned by scanf */
+      char saved_char = p[len];
 
+      p[len] = 0;      /* null-terminate the token */
       if (sizeof (putithere->typed_val_float.dval) <= sizeof (float))
-       sscanf (p, "%g", &putithere->typed_val_float.dval);
+       num = sscanf (p, "%g%c", &putithere->typed_val_float.dval, &c);
       else if (sizeof (putithere->typed_val_float.dval) <= sizeof (double))
-       sscanf (p, "%lg", &putithere->typed_val_float.dval);
+       num = sscanf (p, "%lg%c", &putithere->typed_val_float.dval, &c);
       else
        {
 #ifdef PRINTF_HAS_LONG_DOUBLE
-         sscanf (p, "%Lg", &putithere->typed_val_float.dval);
+         num = sscanf (p, "%Lg%c", &putithere->typed_val_float.dval, &c);
 #else
          /* Scan it into a double, then assign it to the long double.
             This at least wins with values representable in the range
             of doubles. */
          double temp;
-         sscanf (p, "%lg", &temp);
+         num = sscanf (p, "%lg%c", &temp, &c);
          putithere->typed_val_float.dval = temp;
 #endif
        }
-
+      p[len] = saved_char;     /* restore the input stream */
+      if (num != 1)            /* check scanf found ONLY a float ... */
+       return ERROR;
       /* See if it has `f' or `d' suffix (float or double).  */
 
       c = tolower (p[len - 1]);