]> granicus.if.org Git - php/commitdiff
Fix memory leak with bcsqrt on number 0<X<1
authorNikita Popov <nikita.ppv@gmail.com>
Thu, 12 Nov 2020 10:37:54 +0000 (11:37 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Thu, 12 Nov 2020 10:37:54 +0000 (11:37 +0100)
ext/bcmath/libbcmath/src/sqrt.c
ext/bcmath/tests/bcsqrt.phpt

index 6358ff7bcd617b620121cce63d90bbf2a2d67dbc..96cff294754a7f2adfdabf64ef40b90d3baa4d4f 100644 (file)
@@ -70,7 +70,6 @@ bc_sqrt (bc_num *num, int scale)
 
   /* Initialize the variables. */
   rscale = MAX (scale, (*num)->n_scale);
-  bc_init_num(&guess);
   bc_init_num(&guess1);
   bc_init_num(&diff);
   point5 = bc_new_num (1,1);
@@ -87,6 +86,7 @@ bc_sqrt (bc_num *num, int scale)
   else
     {
       /* The number is greater than 1.  Guess should start at 10^(exp/2). */
+      bc_init_num(&guess);
       bc_int2num (&guess,10);
 
       bc_int2num (&guess1,(*num)->n_len);
index 9f4a8ec6a577c0cd2f63538832fa8eb63feb1714..b2a8d8adbc16a172e3d6f5c9638e1497e29f3571 100644 (file)
@@ -9,8 +9,10 @@ bcmath.scale=0
 echo bcsqrt("9"),"\n";
 echo bcsqrt("9.444", 2),"\n";
 echo bcsqrt("1928372132132819737213", 5),"\n";
+echo bcsqrt("0.5", 5), "\n";
 ?>
 --EXPECT--
 3
 3.07
 43913234134.28826
+0.70710