From d030f469c130fc6cdc8debf1b5f46ac3774e54fb Mon Sep 17 00:00:00 2001 From: Michael Snyder Date: Tue, 29 Apr 1997 01:02:37 +0000 Subject: [PATCH] Mon Apr 28 17:27:40 1997 Michael Snyder * c-exp.y, java-exp.y: make parse_number reject "123DEADBEEF". (fix by Bob Manson). --- gdb/ChangeLog | 2 ++ gdb/c-exp.y | 18 +++++++++++------- gdb/java-exp.y | 16 +++++++++++----- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 0ec5ca9e4e8..73eeb5e106d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,7 @@ Mon Apr 28 17:27:40 1997 Michael Snyder + * 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 a70691fce97..a3bbad29600 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 0f27cbd4c27..fd6db48695f 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]); -- 2.30.2