projects
/
musl
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
38b3f1f
)
fix bug parsing lone zero followed by junk, and hex float over-reading
author
Rich Felker
<dalias@aerifal.cx>
Wed, 11 Apr 2012 04:18:57 +0000
(
00:18
-0400)
committer
Rich Felker
<dalias@aerifal.cx>
Wed, 11 Apr 2012 04:18:57 +0000
(
00:18
-0400)
src/internal/floatscan.c
patch
|
blob
|
history
diff --git
a/src/internal/floatscan.c
b/src/internal/floatscan.c
index
000706d
..
3aa5408
100644
(file)
--- a/
src/internal/floatscan.c
+++ b/
src/internal/floatscan.c
@@
-52,7
+52,7
@@
static long long scanexp(FILE *f, int pok)
}
}
-static long double decfloat(FILE *f, int bits, int emin, int sign, int pok)
+static long double decfloat(FILE *f, int
c, int
bits, int emin, int sign, int pok)
{
uint32_t x[KMAX];
static const uint32_t th[] = { LD_B1B_MAX };
{
uint32_t x[KMAX];
static const uint32_t th[] = { LD_B1B_MAX };
@@
-65,13
+65,10
@@
static long double decfloat(FILE *f, int bits, int emin, int sign, int pok)
long double y;
long double frac=0;
long double bias=0;
long double y;
long double frac=0;
long double bias=0;
- int c;
j=0;
k=0;
j=0;
k=0;
- c = shgetc(f);
-
/* Don't let leading zeros consume buffer space */
for (; c=='0'; c = shgetc(f)) gotdig=1;
/* Don't let leading zeros consume buffer space */
for (; c=='0'; c = shgetc(f)) gotdig=1;
@@
-338,6
+335,8
@@
static long double hexfloat(FILE *f, int bits, int emin, int sign, int pok)
}
e2 = 0;
}
}
e2 = 0;
}
+ } else {
+ shunget(f);
}
e2 += 4*rp - 32;
}
e2 += 4*rp - 32;
@@
-436,9
+435,9
@@
long double __floatscan(FILE *f, int c, int prec, int pok)
c = shgetc(f);
if ((c|32) == 'x')
return hexfloat(f, bits, emin, sign, pok);
c = shgetc(f);
if ((c|32) == 'x')
return hexfloat(f, bits, emin, sign, pok);
+ shunget(f);
c = '0';
}
c = '0';
}
- shunget(f);
- return decfloat(f, bits, emin, sign, pok);
+ return decfloat(f, c, bits, emin, sign, pok);
}
}