Skip to content

Commit a29016d

Browse files
committed
Fix leak in gmp_export()
1 parent db8bf0a commit a29016d

File tree

2 files changed

+6
-2
lines changed

2 files changed

+6
-2
lines changed

ext/gmp/gmp.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -1155,7 +1155,7 @@ ZEND_FUNCTION(gmp_export)
11551155
FETCH_GMP_ZVAL(gmpnumber, gmpnumber_arg, temp_a);
11561156

11571157
if (mpz_sgn(gmpnumber) == 0) {
1158-
RETURN_EMPTY_STRING();
1158+
RETVAL_EMPTY_STRING();
11591159
} else {
11601160
size_t bits_per_word = size * 8;
11611161
size_t count = (mpz_sizeinbase(gmpnumber, 2) + bits_per_word - 1) / bits_per_word;
@@ -1164,7 +1164,7 @@ ZEND_FUNCTION(gmp_export)
11641164
mpz_export(ZSTR_VAL(out_string), NULL, order, size, endian, 0, gmpnumber);
11651165
ZSTR_VAL(out_string)[ZSTR_LEN(out_string)] = '\0';
11661166

1167-
RETURN_NEW_STR(out_string);
1167+
RETVAL_NEW_STR(out_string);
11681168
}
11691169

11701170
FREE_GMP_TEMP(temp_a);

ext/gmp/tests/gmp_export.phpt

+4
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ foreach ($export as $k => $test) {
5050

5151
var_dump($passed);
5252

53+
// Argument converted from int to GMP
54+
var_dump(bin2hex(gmp_export(0xff)));
55+
5356
// Invalid arguments (zpp failure)
5457
var_dump(gmp_export());
5558

@@ -62,6 +65,7 @@ var_dump(gmp_export(123, 1, GMP_MSW_FIRST | GMP_LSW_FIRST));
6265
var_dump(gmp_export(123, 1, GMP_BIG_ENDIAN | GMP_LITTLE_ENDIAN));
6366
--EXPECTF--
6467
bool(true)
68+
string(2) "ff"
6569

6670
Warning: gmp_export() expects at least 1 parameter, 0 given in %s on line %d
6771
NULL

0 commit comments

Comments
 (0)