aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Snyder <msnyder@vmware.com>1997-04-29 01:02:37 +0000
committerMichael Snyder <msnyder@vmware.com>1997-04-29 01:02:37 +0000
commitd030f469c130fc6cdc8debf1b5f46ac3774e54fb (patch)
treeab4465053ae21a88a7bef605b33695e001940ef7
parent6a85a617df03fe49e5132682e847440e2f97a6f4 (diff)
downloadgdb-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/ChangeLog2
-rw-r--r--gdb/c-exp.y18
-rw-r--r--gdb/java-exp.y16
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]);