>> From: [EMAIL PROTECTED]
>> Operating system: FreeBSD 4.3
>> PHP version: 4.0.6
>> PHP Bug Type: Scripting Engine problem
>> Bug description: ++, -- operators does not conert the type of variable.
The attached patch should cure it. jeroen, are you on it or should I
commit this patch?
--
Stanislav Malyshev, Zend Products Engineer
[EMAIL PROTECTED] http://www.zend.com/ +972-3-6139665 ext.115
Index: zend_operators.c
===================================================================
RCS file: /repository/Zend/zend_operators.c,v
retrieving revision 1.114
diff -u -b -r1.114 zend_operators.c
--- zend_operators.c 2001/08/26 10:30:19 1.114
+++ zend_operators.c 2001/09/04 16:12:03
@@ -1443,7 +1443,13 @@
{
switch (op1->type) {
case IS_LONG:
+ if(op1->value.lval == LONG_MAX) {
+ /* switch to double */
+ double d = (double)op1->value.lval;
+ ZVAL_DOUBLE(op1, d+1);
+ } else {
op1->value.lval++;
+ }
break;
case IS_DOUBLE:
op1->value.dval = op1->value.dval + 1;
@@ -1459,8 +1465,14 @@
switch (is_numeric_string(strval, op1->value.str.len,
&lval, &dval, 0)) {
case IS_LONG:
+ if(lval == LONG_MAX) {
+ /* switch to double */
+ double d = (double)lval;
+ ZVAL_DOUBLE(op1, d+1);
+ } else {
op1->value.lval = lval+1;
op1->type = IS_LONG;
+ }
efree(strval);
break;
case IS_DOUBLE:
@@ -1492,21 +1504,31 @@
switch (op1->type) {
case IS_LONG:
+ if(op1->value.lval == LONG_MIN) {
+ double d = (double)op1->value.lval;
+ ZVAL_DOUBLE(op1, d-1);
+ } else {
op1->value.lval--;
+ }
break;
case IS_DOUBLE:
op1->value.dval = op1->value.dval - 1;
break;
case IS_STRING: /* Like perl we only support string increment
*/
- if (op1->value.str.len==0) { /* consider as 0 */
+ if (op1->value.str.len == 0) { /* consider as 0 */
STR_FREE(op1->value.str.val);
op1->value.lval = -1;
op1->type = IS_LONG;
break;
} else if (is_numeric_string(op1->value.str.val,
op1->value.str.len, &lval, NULL, 0)==IS_LONG) { /* long */
STR_FREE(op1->value.str.val);
+ if(lval == LONG_MIN) {
+ double d = (double)lval;
+ ZVAL_DOUBLE(op1, d-1);
+ } else {
op1->value.lval = lval-1;
op1->type = IS_LONG;
+ }
break;
}
break;
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]