From a29016d70d72dacb688b4df334508edb550d688f Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 15 Oct 2020 10:16:22 +0200 Subject: Fix leak in gmp_export() --- ext/gmp/gmp.c | 4 ++-- ext/gmp/tests/gmp_export.phpt | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/ext/gmp/gmp.c b/ext/gmp/gmp.c index 3c92735cf6..e8d39ffe71 100644 --- a/ext/gmp/gmp.c +++ b/ext/gmp/gmp.c @@ -1155,7 +1155,7 @@ ZEND_FUNCTION(gmp_export) FETCH_GMP_ZVAL(gmpnumber, gmpnumber_arg, temp_a); if (mpz_sgn(gmpnumber) == 0) { - RETURN_EMPTY_STRING(); + RETVAL_EMPTY_STRING(); } else { size_t bits_per_word = size * 8; size_t count = (mpz_sizeinbase(gmpnumber, 2) + bits_per_word - 1) / bits_per_word; @@ -1164,7 +1164,7 @@ ZEND_FUNCTION(gmp_export) mpz_export(ZSTR_VAL(out_string), NULL, order, size, endian, 0, gmpnumber); ZSTR_VAL(out_string)[ZSTR_LEN(out_string)] = '\0'; - RETURN_NEW_STR(out_string); + RETVAL_NEW_STR(out_string); } FREE_GMP_TEMP(temp_a); diff --git a/ext/gmp/tests/gmp_export.phpt b/ext/gmp/tests/gmp_export.phpt index 52449ecf0a..e2acab7f37 100644 --- a/ext/gmp/tests/gmp_export.phpt +++ b/ext/gmp/tests/gmp_export.phpt @@ -50,6 +50,9 @@ foreach ($export as $k => $test) { var_dump($passed); +// Argument converted from int to GMP +var_dump(bin2hex(gmp_export(0xff))); + // Invalid arguments (zpp failure) var_dump(gmp_export()); @@ -62,6 +65,7 @@ var_dump(gmp_export(123, 1, GMP_MSW_FIRST | GMP_LSW_FIRST)); var_dump(gmp_export(123, 1, GMP_BIG_ENDIAN | GMP_LITTLE_ENDIAN)); --EXPECTF-- bool(true) +string(2) "ff" Warning: gmp_export() expects at least 1 parameter, 0 given in %s on line %d NULL -- cgit v1.2.1