dmitry Thu Dec 22 07:54:19 2005 EDT Modified files: /php-src/ext/ctype ctype.c Log: Fixed memory corruption http://cvs.php.net/viewcvs.cgi/php-src/ext/ctype/ctype.c?r1=1.36&r2=1.37&diff_format=u Index: php-src/ext/ctype/ctype.c diff -u php-src/ext/ctype/ctype.c:1.36 php-src/ext/ctype/ctype.c:1.37 --- php-src/ext/ctype/ctype.c:1.36 Tue Dec 6 02:24:26 2005 +++ php-src/ext/ctype/ctype.c Thu Dec 22 07:54:19 2005 @@ -92,7 +92,7 @@ /* {{{ ctype */ #define CTYPE(iswhat) \ - zval *c; \ + zval *c, tmp; \ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &c) == FAILURE) \ return; \ switch (Z_TYPE_P(c)) { \ @@ -102,23 +102,33 @@ } else if (Z_LVAL_P(c) >= -128 && Z_LVAL_P(c) < 0) { \ RETURN_BOOL(iswhat(Z_LVAL_P(c) + 256)); \ } \ - SEPARATE_ZVAL(&c); \ - convert_to_string(c); \ + tmp = *c; \ + zval_copy_ctor(&tmp); \ + convert_to_string(&tmp); \ + c = &tmp; \ case IS_STRING: \ case IS_BINARY: \ string:\ { \ char *p = Z_STRVAL_P(c), *e = Z_STRVAL_P(c) + Z_STRLEN_P(c); \ if (e == p) { \ + if (c == &tmp) zval_dtor(&tmp); \ RETURN_FALSE; \ } \ while (p < e) { \ - if(!iswhat((int)*(unsigned char *)(p++))) RETURN_FALSE; \ + if(!iswhat((int)*(unsigned char *)(p++))) { \ + if (c == &tmp) zval_dtor(&tmp); \ + RETURN_FALSE; \ + } \ } \ + if (c == &tmp) zval_dtor(&tmp); \ RETURN_TRUE; \ } \ case IS_UNICODE: \ - convert_to_string(c); \ + tmp = *c; \ + zval_copy_ctor(&tmp); \ + convert_to_string(&tmp); \ + c = &tmp; \ goto string; \ default: \ break; \
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php