mirror of
https://github.com/fluencelabs/musl
synced 2025-06-12 22:41:37 +00:00
fix bug parsing lone zero followed by junk, and hex float over-reading
This commit is contained in:
@ -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 };
|
||||
@ -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;
|
||||
int c;
|
||||
|
||||
j=0;
|
||||
k=0;
|
||||
|
||||
c = shgetc(f);
|
||||
|
||||
/* 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;
|
||||
}
|
||||
} else {
|
||||
shunget(f);
|
||||
}
|
||||
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);
|
||||
shunget(f);
|
||||
c = '0';
|
||||
}
|
||||
|
||||
shunget(f);
|
||||
return decfloat(f, bits, emin, sign, pok);
|
||||
return decfloat(f, c, bits, emin, sign, pok);
|
||||
}
|
||||
|
Reference in New Issue
Block a user