rasmus          Wed Apr  2 18:50:41 2003 EDT

  Modified files:              (Branch: PHP_4_3)
    /php4       TODO_SEGFAULTS 
    /php4/ext/bcmath    bcmath.c 
  Log:
  Negative precision makes no sense, so check for that, but let the memory
  manager error out on huge non-negative precision args
  
  
Index: php4/TODO_SEGFAULTS
diff -u php4/TODO_SEGFAULTS:1.1.2.10 php4/TODO_SEGFAULTS:1.1.2.11
--- php4/TODO_SEGFAULTS:1.1.2.10        Wed Apr  2 18:09:39 2003
+++ php4/TODO_SEGFAULTS Wed Apr  2 18:50:40 2003
@@ -12,10 +12,10 @@
        str_repeat (Ilia)
     setlocale (Rasmus)
     unregister_tick_function (Rasmus)
+       bcsub (Rasmus)
 
 Open:
 
-    bcsub (1)
     mb_ereg (2)
     mb_ereg_match (2)
     mb_eregi (2)
@@ -24,9 +24,6 @@
     xml_parser_create (Unable to reproduce - Rasmus)
 
     Notes:
-
-(1) appears, when bcadd, bcmod, bcmul, bcscale, bcsqrt have been tested
-    prior to it.  does not segfault when tested alone.
 
 (2) sometimes, mb_ereg passes the test, although a subsequent mbereg
     will cause a segfault. Probably something in-between screws up the engine.
Index: php4/ext/bcmath/bcmath.c
diff -u php4/ext/bcmath/bcmath.c:1.39.4.6 php4/ext/bcmath/bcmath.c:1.39.4.7
--- php4/ext/bcmath/bcmath.c:1.39.4.6   Thu Feb  6 17:23:36 2003
+++ php4/ext/bcmath/bcmath.c    Wed Apr  2 18:50:41 2003
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: bcmath.c,v 1.39.4.6 2003/02/06 22:23:36 pollita Exp $ */
+/* $Id: bcmath.c,v 1.39.4.7 2003/04/02 23:50:41 rasmus Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -96,7 +96,7 @@
        if (cfg_get_long("bcmath.scale", &bc_precision)==FAILURE) {
                bc_precision=0;
        }
-       
+       if(bc_precision<0) bc_precision=0;
        bc_init_numbers(TSRMLS_C);
        
        return SUCCESS;
@@ -144,7 +144,7 @@
                                WRONG_PARAM_COUNT;
                        }
                                convert_to_long_ex(scale_param);
-                               scale = (int) Z_LVAL_PP(scale_param);
+                               scale = (int) (Z_LVAL_PP(scale_param)<0) ? 
0:Z_LVAL_PP(scale_param);
                                break;
                default:
                                WRONG_PARAM_COUNT;
@@ -189,7 +189,7 @@
                                WRONG_PARAM_COUNT;
                        }
                                convert_to_long_ex(scale_param);
-                               scale = (int) Z_LVAL_PP(scale_param);
+                               scale = (int) (Z_LVAL_PP(scale_param)<0) ? 
0:Z_LVAL_PP(scale_param);
                                break;
                default:
                                WRONG_PARAM_COUNT;
@@ -234,7 +234,7 @@
                                WRONG_PARAM_COUNT;
                        }
                                convert_to_long_ex(scale_param);
-                               scale = (int) Z_LVAL_PP(scale_param);
+                               scale = (int) (Z_LVAL_PP(scale_param)<0) ? 
0:Z_LVAL_PP(scale_param);
                                break;
                default:
                                WRONG_PARAM_COUNT;
@@ -279,7 +279,7 @@
                                WRONG_PARAM_COUNT;
                        }
                                convert_to_long_ex(scale_param);
-                               scale = (int) Z_LVAL_PP(scale_param);
+                               scale = (int) (Z_LVAL_PP(scale_param)<0) ? 
0:Z_LVAL_PP(scale_param);
                                break;
                default:
                                WRONG_PARAM_COUNT;
@@ -371,7 +371,7 @@
                                WRONG_PARAM_COUNT;
                        }
                                convert_to_long_ex(scale_param);
-                               scale = (int) Z_LVAL_PP(scale_param);
+                               scale = (int) (Z_LVAL_PP(scale_param)<0) ? 
0:Z_LVAL_PP(scale_param);
                                break;
                default:
                                WRONG_PARAM_COUNT;
@@ -416,7 +416,7 @@
                                WRONG_PARAM_COUNT;
                        }
                                convert_to_long_ex(scale_param);
-                               scale = (int) Z_LVAL_PP(scale_param);
+                               scale = (int) (Z_LVAL_PP(scale_param)<0) ? 
0:Z_LVAL_PP(scale_param);
                                break;
                default:
                                WRONG_PARAM_COUNT;
@@ -458,7 +458,7 @@
                                WRONG_PARAM_COUNT;
                        }
                                convert_to_long_ex(scale_param);
-                               scale = (int) Z_LVAL_PP(scale_param);
+                               scale = (int) (Z_LVAL_PP(scale_param)<0) ? 
0:Z_LVAL_PP(scale_param);
                                break;
                default:
                                WRONG_PARAM_COUNT;
@@ -492,7 +492,8 @@
        }
        
        convert_to_long_ex(new_scale);
-       bc_precision = Z_LVAL_PP(new_scale);
+       bc_precision = (Z_LVAL_PP(new_scale)<0) ? 0 : Z_LVAL_PP(new_scale);
+
        RETURN_TRUE;
 }
 /* }}} */



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to