]> granicus.if.org Git - php/commitdiff
Fix leak in gmp_export()
authorNikita Popov <nikita.ppv@gmail.com>
Thu, 15 Oct 2020 08:16:22 +0000 (10:16 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Thu, 15 Oct 2020 08:16:22 +0000 (10:16 +0200)
ext/gmp/gmp.c
ext/gmp/tests/gmp_export.phpt

index 3c92735cf641a7703a48b6651a202c8f4fa9267a..e8d39ffe7176a9816868a312a4a3e65b8f01aa4a 100644 (file)
@@ -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);
index 52449ecf0aff1700809b55ca1fdb0462b1fbb6cf..e2acab7f37168328d14291b410b08b3871ba4f0c 100644 (file)
@@ -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