Skip to content

Commit ccef271

Browse files
committed
MF51:
fix leak in zend_strtod() on big doubles
1 parent 66c19b6 commit ccef271

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

Zend/zend_strtod.c

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1250,7 +1250,7 @@ zend_strtod
12501250
_double rv, rv0;
12511251
Long L;
12521252
ULong y, z;
1253-
Bigint *bb, *bb1, *bd, *bd0, *bs, *delta;
1253+
Bigint *bb, *bb1, *bd, *bd0, *bs, *delta, *tmp;
12541254
double result;
12551255

12561256
CONST char decimal_point = '.';
@@ -1776,5 +1776,21 @@ zend_strtod
17761776
if (se)
17771777
*se = (char *)s;
17781778
result = sign ? -value(rv) : value(rv);
1779+
1780+
for (i = 0; i <= Kmax; i++) {
1781+
Bigint **listp = &freelist[i];
1782+
while ((tmp = *listp) != NULL) {
1783+
*listp = tmp->next;
1784+
free(tmp);
1785+
}
1786+
freelist[i] = NULL;
1787+
}
1788+
1789+
while (p5s) {
1790+
tmp = p5s;
1791+
p5s = p5s->next;
1792+
free(tmp);
1793+
}
1794+
17791795
return result;
17801796
}

0 commit comments

Comments
 (0)