mirror of
https://github.com/fluencelabs/musl
synced 2025-06-13 23:11:51 +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];
|
uint32_t x[KMAX];
|
||||||
static const uint32_t th[] = { LD_B1B_MAX };
|
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 y;
|
||||||
long double frac=0;
|
long double frac=0;
|
||||||
long double bias=0;
|
long double bias=0;
|
||||||
int c;
|
|
||||||
|
|
||||||
j=0;
|
j=0;
|
||||||
k=0;
|
k=0;
|
||||||
|
|
||||||
c = shgetc(f);
|
|
||||||
|
|
||||||
/* Don't let leading zeros consume buffer space */
|
/* Don't let leading zeros consume buffer space */
|
||||||
for (; c=='0'; c = shgetc(f)) gotdig=1;
|
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);
|
c = shgetc(f);
|
||||||
if ((c|32) == 'x')
|
if ((c|32) == 'x')
|
||||||
return hexfloat(f, bits, emin, sign, pok);
|
return hexfloat(f, bits, emin, sign, pok);
|
||||||
|
shunget(f);
|
||||||
c = '0';
|
c = '0';
|
||||||
}
|
}
|
||||||
|
|
||||||
shunget(f);
|
return decfloat(f, c, bits, emin, sign, pok);
|
||||||
return decfloat(f, bits, emin, sign, pok);
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user