This is the mail archive of the ecos-patches@sourceware.org mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Fix strtod() flaw.


Hello,

strtod() bundled with eCos considers 'd' and 'D' to be synonyms for 'e'
and 'E' in floating point numbers though according to specification only
'e' and 'E' are allowed. The patch below fixes it.

diff -a -u -r1.1.1.1 strtod.cxx
--- packages/language/c/libc/stdlib/current/src/strtod.cxx	7 Dec 2005 12:06:34 -0000	1.1.1.1
+++ packages/language/c/libc/stdlib/current/src/strtod.cxx	27 Dec 2005 18:22:28 -0000
@@ -83,7 +83,7 @@
 
 // MACROS
 
-#define Ise(c)          ((c == 'e') || (c == 'E') || (c == 'd') || (c == 'D'))
+#define Ise(c)          ((c == 'e') || (c == 'E'))
 #define Issign(c)       ((c == '-') || (c == '+'))
 #define Val(c)          ((c - '0'))
 
@@ -219,7 +219,7 @@
     if(Ise(*nptr))
     {
         conv_done = 1;
-        if(*++nptr != '\0') /* skip e|E|d|D */
+        if(*++nptr != '\0') /* skip e|E */
         {  /* ! ([nptr]xxx[.[yyy]]e)  */
             
             while(isspace(*nptr)) nptr++; /* Ansi allows spaces after e */
diff -a -u -r1.1.1.1 ChangeLog
--- packages/language/c/libc/stdlib/current/ChangeLog	7 Dec 2005 12:06:34 -0000	1.1.1.1
+++ packages/language/c/libc/stdlib/current/ChangeLog	27 Dec 2005 18:42:26 -0000
@@ -1,3 +1,8 @@
+2005-12-27  Sergei Organov  <osv@javad.com>
+
+	* src/strtod.cxx (Ise): 'd' and 'D' aren't allowed in floating
+	formats.
+
 2004-08-18  Fredrik Hederstierna  <fredrik@wespot.com>
 2004-08-18  Jonathan Larmour  <jifl@eCosCentric.com>
 




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]