提交 109048e0 编写于 作者: R Rich Felker

fix carry into uninitialized slots during printf floating point rounding

in cases where rounding caused a carry, the slot into which the carry
was taking place was unconditionally treated as valid, despite the
possibility that it could be a new slot prior to the beginning of the
existing non-rounded number. in theory this could lead to unbounded
runaway carry, but in order for that to happen, the whole
uninitialized buffer would need to have been pre-filled with 32-bit
integer values greater than or equal to 999999999.

patch based on proposed fix by Morten Welinder, who also discovered
and reported the bug.
上级 7e8b0761
...@@ -356,9 +356,9 @@ static int fmt_fp(FILE *f, long double y, int w, int p, int fl, int t) ...@@ -356,9 +356,9 @@ static int fmt_fp(FILE *f, long double y, int w, int p, int fl, int t)
*d = *d + i; *d = *d + i;
while (*d > 999999999) { while (*d > 999999999) {
*d--=0; *d--=0;
if (d<a) *--a=0;
(*d)++; (*d)++;
} }
if (d<a) a=d;
for (i=10, e=9*(r-a); *a>=i; i*=10, e++); for (i=10, e=9*(r-a); *a>=i; i*=10, e++);
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册