diff options
author | Michael Snyder <msnyder@vmware.com> | 1997-04-29 01:02:37 +0000 |
---|---|---|
committer | Michael Snyder <msnyder@vmware.com> | 1997-04-29 01:02:37 +0000 |
commit | d030f469c130fc6cdc8debf1b5f46ac3774e54fb (patch) | |
tree | ab4465053ae21a88a7bef605b33695e001940ef7 | |
parent | 6a85a617df03fe49e5132682e847440e2f97a6f4 (diff) | |
download | gdb-d030f469c130fc6cdc8debf1b5f46ac3774e54fb.zip gdb-d030f469c130fc6cdc8debf1b5f46ac3774e54fb.tar.gz gdb-d030f469c130fc6cdc8debf1b5f46ac3774e54fb.tar.bz2 |
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).
-rw-r--r-- | gdb/ChangeLog | 2 | ||||
-rw-r--r-- | gdb/c-exp.y | 18 | ||||
-rw-r--r-- | gdb/java-exp.y | 16 |
3 files changed, 24 insertions, 12 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 0ec5ca9..73eeb5e 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -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. diff --git a/gdb/c-exp.y b/gdb/c-exp.y index a70691f..a3bbad2 100644 --- a/gdb/c-exp.y +++ b/gdb/c-exp.y @@ -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]); diff --git a/gdb/java-exp.y b/gdb/java-exp.y index 0f27cbd..fd6db48 100644 --- a/gdb/java-exp.y +++ b/gdb/java-exp.y @@ -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]); |