Michael Gilbert
2011-Jan-18 02:17 UTC
[Secure-testing-commits] r15916 - in data/patches/MOPB: . php4-etch php4-sarge
Author: gilbert-guest Date: 2011-01-18 02:17:42 +0000 (Tue, 18 Jan 2011) New Revision: 15916 Removed: data/patches/MOPB/MOPB-04-php4.diff data/patches/MOPB/MOPB-10-php5.diff data/patches/MOPB/MOPB-14-php5.diff data/patches/MOPB/MOPB-15-php5.diff data/patches/MOPB/MOPB-18-php5.diff data/patches/MOPB/MOPB-19-php5.diff data/patches/MOPB/MOPB-22-php5.diff data/patches/MOPB/MOPB-24-php5.diff data/patches/MOPB/MOPB-26-php4.diff data/patches/MOPB/MOPB-26-php5.diff data/patches/MOPB/MOPB-29-php5.diff data/patches/MOPB/MOPB-30-php5.diff data/patches/MOPB/MOPB-32-php4.diff data/patches/MOPB/MOPB-34-php5.diff data/patches/MOPB/MOPB-35-php4.diff data/patches/MOPB/MOPB-41-php5.diff data/patches/MOPB/MOPB-42-php5.diff data/patches/MOPB/MOPB-44-php5.diff data/patches/MOPB/MOPB-45-php5.diff data/patches/MOPB/php4-etch/069-CVE-2007-0910-updated-for-MOPB-32.patch data/patches/MOPB/php4-etch/071-CVE-2007-1380-MOPB-10.patch data/patches/MOPB/php4-etch/072-CVE-2007-1718-MOPB-34.patch data/patches/MOPB/php4-etch/073-CVE-2007-1521-MOPB-22.patch data/patches/MOPB/php4-etch/074-CVE-2007-1286-MOPB-04.patch data/patches/MOPB/php4-sarge/CVE-2007-0910-updated-for-MOPB-32.patch data/patches/MOPB/php4-sarge/CVE-2007-1286-MOPB-04.patch data/patches/MOPB/php4-sarge/CVE-2007-1380-MOPB-10.patch data/patches/MOPB/php4-sarge/CVE-2007-1521-MOPB-22.patch Log: remove old php patch files (these are already in the php source anyway) Deleted: data/patches/MOPB/MOPB-04-php4.diff ==================================================================--- data/patches/MOPB/MOPB-04-php4.diff 2011-01-18 02:17:33 UTC (rev 15915) +++ data/patches/MOPB/MOPB-04-php4.diff 2011-01-18 02:17:42 UTC (rev 15916) @@ -1,33 +0,0 @@ ---- var_unserializer.c 2006/08/09 23:29:17 1.18.4.24.2.7 -+++ var_unserializer.c 2006/10/27 08:35:25 1.18.4.24.2.8 -@@ -18,7 +18,7 @@ - +----------------------------------------------------------------------+ - */ - --/* $Id: var_unserializer.c,v 1.18.4.24.2.7 2006/08/09 23:29:17 nlopess Exp $ */ -+/* $Id: var_unserializer.c,v 1.18.4.24.2.8 2006/10/27 08:35:25 sesser Exp $ */ - - #include "php.h" - #include "ext/standard/php_var.h" -@@ -958,6 +958,10 @@ - - if (*rval == *rval_ref) return 0; - -+ if ((*rval_ref)->refcount > 65500) { -+ return 0; -+ } -+ - if (*rval != NULL) { - zval_ptr_dtor(rval); - } -@@ -999,6 +1003,10 @@ - - id = parse_iv(start + 2) - 1; - if (id == -1 || var_access(var_hash, id, &rval_ref) != SUCCESS) { -+ return 0; -+ } -+ -+ if ((*rval_ref)->refcount > 65500) { - return 0; - } - Deleted: data/patches/MOPB/MOPB-10-php5.diff ==================================================================--- data/patches/MOPB/MOPB-10-php5.diff 2011-01-18 02:17:33 UTC (rev 15915) +++ data/patches/MOPB/MOPB-10-php5.diff 2011-01-18 02:17:42 UTC (rev 15916) @@ -1,16 +0,0 @@ -# http://cvs.php.net/viewvc.cgi/php-src/ext/session/session.c?r1=1.417.2.8.2.22&r2=1.417.2.8.2.23&pathrev=PHP_5_2&view=patch -# http://cvs.php.net/viewvc.cgi/php-src/ext/session/session.c?r1=1.417.2.8.2.26&r2=1.417.2.8.2.27&pathrev=PHP_5_2&view=patch ---- php-src/ext/session/session.c 2006/12/26 16:53:47 1.417.2.8.2.22 -+++ php-src/ext/session/session.c 2006/12/31 22:25:55 1.417.2.8.2.23 -@@ -471,6 +471,11 @@ - for (p = val; p < endptr; ) { - zval **tmp; - namelen = *p & (~PS_BIN_UNDEF); -+ -+ if (namelen < 0 || namelen > PS_BIN_MAX || (p + namelen) >= endptr) { -+ return FAILURE; -+ } -+ - has_value = *p & PS_BIN_UNDEF ? 0 : 1; - - name = estrndup(p + 1, namelen); Deleted: data/patches/MOPB/MOPB-14-php5.diff ==================================================================--- data/patches/MOPB/MOPB-14-php5.diff 2011-01-18 02:17:33 UTC (rev 15915) +++ data/patches/MOPB/MOPB-14-php5.diff 2011-01-18 02:17:42 UTC (rev 15916) @@ -1,55 +0,0 @@ -# http://cvs.php.net/viewvc.cgi/php-src/ext/standard/string.c?r1=1.445.2.14.2.45&r2=1.445.2.14.2.49&pathrev=PHP_5_2&view=patch -# http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/strings/substr_compare.phpt?r1=1.1.2.2&r2=1.1.2.2.2.1&pathrev=PHP_5_2&view=patch ---- php-src/ext/standard/string.c 2007/03/03 15:46:29 1.445.2.14.2.45 -+++ php-src/ext/standard/string.c 2007/03/08 00:47:04 1.445.2.14.2.49 -@@ -4642,18 +4642,20 @@ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset should be greater than or equal to 0."); - RETURN_FALSE; - } -- p += Z_LVAL_PP(offset); -- if (p > endp) { -+ -+ if (Z_LVAL_PP(offset) > Z_STRLEN_PP(haystack)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset value %ld exceeds string length.", Z_LVAL_PP(offset)); - RETURN_FALSE; - } -+ p += Z_LVAL_PP(offset); -+ - if (ac == 4) { - convert_to_long_ex(length); - if (Z_LVAL_PP(length) <= 0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Length should be greater than 0."); - RETURN_FALSE; - } -- if ((p + Z_LVAL_PP(length)) > endp) { -+ if (Z_LVAL_PP(length) > (Z_STRLEN_PP(haystack) - Z_LVAL_PP(offset))) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Length value %ld exceeds string length.", Z_LVAL_PP(length)); - RETURN_FALSE; - } -@@ -5074,8 +5076,13 @@ - offset = (offset < 0) ? 0 : offset; - } - -- if ((offset + len) > s1_len) { -+ if(offset > s1_len) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "The start position cannot exceed initial string length"); -+ RETURN_FALSE; -+ } -+ -+ if(len > s1_len - offset) { -+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "The length cannot exceed initial string length"); - RETURN_FALSE; - } - -diff -uNrp php5-5.1.6-unpatched/ext/standard/tests/strings/substr_compare.phpt php5-5.1.6/ext/standard/string.c ---- php5-5.1.6-unpatched/ext/standard/tests/strings/substr_compare.phpt 2007-04-23 16:12:26.000000000 -0700 -+++ php5-5.1.6/ext/standard/tests/strings/substr_compare.phpt 2007-04-23 16:16:15.000000000 -0700 -@@ -24,7 +24,7 @@ - int(1) - int(-1) - --Warning: substr_compare(): The start position cannot exceed initial string length in %s on line %d -+Warning: substr_compare(): The length cannot exceed initial string length in %s on line %d - bool(false) - - Warning: substr_compare() expects parameter 5 to be boolean, object given in %s on line %d Deleted: data/patches/MOPB/MOPB-15-php5.diff ==================================================================--- data/patches/MOPB/MOPB-15-php5.diff 2011-01-18 02:17:33 UTC (rev 15915) +++ data/patches/MOPB/MOPB-15-php5.diff 2011-01-18 02:17:42 UTC (rev 15916) @@ -1,91 +0,0 @@ -# http://cvs.php.net/viewvc.cgi/php-src/ext/shmop/shmop.c?r1=1.31.2.2.2.1&r2=1.31.2.2.2.2&pathrev=PHP_5_2&view=patch ---- php-src/ext/shmop/shmop.c 2006/11/03 14:46:48 1.31.2.2.2.1 -+++ php-src/ext/shmop/shmop.c 2006/12/30 20:21:25 1.31.2.2.2.2 -@@ -78,6 +78,16 @@ - ZEND_GET_MODULE(shmop) - #endif - -+#define PHP_SHMOP_GET_RES \ -+ shmop = zend_list_find(shmid, &type); \ -+ if (!shmop) { \ -+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "no shared memory segment with an id of [%lu]", shmid); \ -+ RETURN_FALSE; \ -+ } else if (type != shm_type) { \ -+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "not a shmop resource"); \ -+ RETURN_FALSE; \ -+ } \ -+ - /* {{{ rsclean - */ - static void rsclean(zend_rsrc_list_entry *rsrc TSRMLS_DC) -@@ -201,13 +211,8 @@ - return; - } - -- shmop = zend_list_find(shmid, &type); -+ PHP_SHMOP_GET_RES - -- if (!shmop) { -- php_error_docref(NULL TSRMLS_CC, E_WARNING, "no shared memory segment with an id of [%lu]", shmid); -- RETURN_FALSE; -- } -- - if (start < 0 || start > shmop->size) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "start is out of range"); - RETURN_FALSE; -@@ -241,12 +246,7 @@ - return; - } - -- shmop = zend_list_find(shmid, &type); -- -- if (!shmop) { -- php_error_docref(NULL TSRMLS_CC, E_WARNING, "no shared memory segment with an id of [%lu]", shmid); -- RETURN_FALSE; -- } -+ PHP_SHMOP_GET_RES - - zend_list_delete(shmid); - } -@@ -264,12 +264,7 @@ - return; - } - -- shmop = zend_list_find(shmid, &type); -- -- if (!shmop) { -- php_error_docref(NULL TSRMLS_CC, E_WARNING, "no shared memory segment with an id of [%lu]", shmid); -- RETURN_FALSE; -- } -+ PHP_SHMOP_GET_RES - - RETURN_LONG(shmop->size); - } -@@ -290,12 +285,7 @@ - return; - } - -- shmop = zend_list_find(shmid, &type); -- -- if (!shmop) { -- php_error_docref(NULL TSRMLS_CC, E_WARNING, "no shared memory segment with an id of [%lu]", shmid); -- RETURN_FALSE; -- } -+ PHP_SHMOP_GET_RES - - if ((shmop->shmatflg & SHM_RDONLY) == SHM_RDONLY) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "trying to write to a read only segment"); -@@ -326,12 +316,7 @@ - return; - } - -- shmop = zend_list_find(shmid, &type); -- -- if (!shmop) { -- php_error_docref(NULL TSRMLS_CC, E_WARNING, "no shared memory segment with an id of [%lu]", shmid); -- RETURN_FALSE; -- } -+ PHP_SHMOP_GET_RES - - if (shmctl(shmop->shmid, IPC_RMID, NULL)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "can''t mark segment for deletion (are you the owner?)"); Deleted: data/patches/MOPB/MOPB-18-php5.diff ==================================================================--- data/patches/MOPB/MOPB-18-php5.diff 2011-01-18 02:17:33 UTC (rev 15915) +++ data/patches/MOPB/MOPB-18-php5.diff 2011-01-18 02:17:42 UTC (rev 15916) @@ -1,166 +0,0 @@ ---- sanitizing_filters.c 2006/10/03 11:42:23 1.11.2.5 -+++ sanitizing_filters.c 2006/12/18 15:02:16 1.11.2.7 -@@ -27,52 +27,29 @@ - /* }}} */ - - /* {{{ HELPER FUNCTIONS */ --static void php_filter_encode_html(zval *value, const char* chars, int encode_nul) -+static void php_filter_encode_html(zval *value, const unsigned char *chars) - { -- register int x, y; - smart_str str = {0}; - int len = Z_STRLEN_P(value); -- char *s = Z_STRVAL_P(value); -+ unsigned char *s = (unsigned char *)Z_STRVAL_P(value); -+ unsigned char *e = s + len; - - if (Z_STRLEN_P(value) == 0) { - return; - } - -- for (x = 0, y = 0; len--; x++, y++) { -- if (strchr(chars, s[x]) || (encode_nul && s[x] == 0)) { -+ while (s < e) { -+ if (chars[*s]) { - smart_str_appendl(&str, "&#", 2); -- smart_str_append_long(&str, s[x]); -+ smart_str_append_unsigned(&str, (unsigned long)*s); - smart_str_appendc(&str, '';''); - } else { -- smart_str_appendc(&str, s[x]); -+ /* XXX: this needs to be optimized to work with blocks of ''safe'' chars */ -+ smart_str_appendc(&str, *s); - } -+ s++; - } -- smart_str_0(&str); -- efree(Z_STRVAL_P(value)); -- Z_STRVAL_P(value) = str.c; -- Z_STRLEN_P(value) = str.len; --} -- --static void php_filter_encode_html_high_low(zval *value, long flags) --{ -- register int x, y; -- smart_str str = {0}; -- int len = Z_STRLEN_P(value); -- unsigned char *s = (unsigned char *)Z_STRVAL_P(value); - -- if (Z_STRLEN_P(value) == 0) { -- return; -- } -- -- for (x = 0, y = 0; len--; x++, y++) { -- if (((flags & FILTER_FLAG_ENCODE_LOW) && (s[x] < 32)) || ((flags & FILTER_FLAG_ENCODE_HIGH) && (s[x] > 127))) { -- smart_str_appendl(&str, "&#", 2); -- smart_str_append_unsigned(&str, s[x]); -- smart_str_appendc(&str, '';''); -- } else { -- smart_str_appendc(&str, s[x]); -- } -- } - smart_str_0(&str); - efree(Z_STRVAL_P(value)); - Z_STRVAL_P(value) = str.c; -@@ -181,9 +158,28 @@ - void php_filter_string(PHP_INPUT_FILTER_PARAM_DECL) - { - size_t new_len; -- -+ unsigned char enc[256] = {0}; -+ -+ /* strip high/strip low ( see flags )*/ -+ php_filter_strip(value, flags); -+ -+ if (!(flags & FILTER_FLAG_NO_ENCODE_QUOTES)) { -+ enc[''\''''] = enc[''"''] = 1; -+ } -+ if (flags & FILTER_FLAG_ENCODE_AMP) { -+ enc[''&''] = 1; -+ } -+ if (flags & FILTER_FLAG_ENCODE_LOW) { -+ memset(enc, 1, 32); -+ } -+ if (flags & FILTER_FLAG_ENCODE_HIGH) { -+ memset(enc + 127, 1, sizeof(enc) - 127); -+ } -+ -+ php_filter_encode_html(value, enc); -+ - /* strip tags, implicitly also removes \0 chars */ -- new_len = php_strip_tags(Z_STRVAL_P(value), Z_STRLEN_P(value), NULL, NULL, 0); -+ new_len = php_strip_tags_ex(Z_STRVAL_P(value), Z_STRLEN_P(value), NULL, NULL, 0, 1); - Z_STRLEN_P(value) = new_len; - - if (new_len == 0) { -@@ -191,21 +187,6 @@ - ZVAL_EMPTY_STRING(value); - return; - } -- -- if (! (flags & FILTER_FLAG_NO_ENCODE_QUOTES)) { -- /* encode '' and " to numerical entity */ -- php_filter_encode_html(value, "''\"", 0); -- } -- /* strip high/strip low ( see flags )*/ -- php_filter_strip(value, flags); -- -- /* encode low/encode high flags */ -- php_filter_encode_html_high_low(value, flags); -- -- /* also all the flags - & encode as %xx */ -- if (flags & FILTER_FLAG_ENCODE_AMP) { -- php_filter_encode_html(value, "&", 0); -- } - } - /* }}} */ - -@@ -222,11 +203,21 @@ - /* {{{ php_filter_special_chars */ - void php_filter_special_chars(PHP_INPUT_FILTER_PARAM_DECL) - { -+ unsigned char enc[256] = {0}; -+ -+ php_filter_strip(value, flags); -+ - /* encodes '' " < > & \0 to numerical entities */ -- php_filter_encode_html(value, "''\"<>&", 1); -+ enc[''\''''] = enc[''"''] = enc[''<''] = enc[''>''] = enc[''&''] = enc[0] = 1; -+ - /* if strip low is not set, then we encode them as &#xx; */ -- php_filter_strip(value, flags); -- php_filter_encode_html_high_low(value, FILTER_FLAG_ENCODE_LOW | flags); -+ memset(enc, 1, 32); -+ -+ if (flags & FILTER_FLAG_ENCODE_HIGH) { -+ memset(enc + 127, 1, sizeof(enc) - 127); -+ } -+ -+ php_filter_encode_html(value, enc); - } - /* }}} */ - -@@ -235,11 +226,21 @@ - { - /* Only if no flags are set (optimization) */ - if (flags != 0 && Z_STRLEN_P(value) > 0) { -+ unsigned char enc[256] = {0}; -+ - php_filter_strip(value, flags); -+ - if (flags & FILTER_FLAG_ENCODE_AMP) { -- php_filter_encode_html(value, "&", 0); -+ enc[''&''] = 1; - } -- php_filter_encode_html_high_low(value, flags); -+ if (flags & FILTER_FLAG_ENCODE_LOW) { -+ memset(enc, 1, 32); -+ } -+ if (flags & FILTER_FLAG_ENCODE_HIGH) { -+ memset(enc + 127, 1, sizeof(enc) - 127); -+ } -+ -+ php_filter_encode_html(value, enc); - } - } - /* }}} */ Deleted: data/patches/MOPB/MOPB-19-php5.diff ==================================================================--- data/patches/MOPB/MOPB-19-php5.diff 2011-01-18 02:17:33 UTC (rev 15915) +++ data/patches/MOPB/MOPB-19-php5.diff 2011-01-18 02:17:42 UTC (rev 15916) @@ -1,1127 +0,0 @@ -Index: php5-5.2.0/ext/filter/logical_filters.c -==================================================================---- php5-5.2.0.orig/ext/filter/logical_filters.c 2007-04-23 20:22:47.000000000 +0200 -+++ php5-5.2.0/ext/filter/logical_filters.c 2007-04-23 20:22:47.000000000 +0200 -@@ -17,21 +17,33 @@ - +----------------------------------------------------------------------+ - */ - --/* $Id: logical_filters.c,v 1.1.2.11 2006/10/17 15:26:14 iliaa Exp $ */ -+/* $Id: logical_filters.c,v 1.1.2.18 2006/12/26 09:16:24 dmitry Exp $ */ - - #include "php_filter.h" - #include "filter_private.h" - #include "ext/standard/url.h" - #include "ext/pcre/php_pcre.h" - -+#include "zend_multiply.h" -+ -+#if HAVE_ARPA_INET_H -+# include <arpa/inet.h> -+#endif -+ -+#define LONG_SIGN_MASK (1L << (8*sizeof(long)-1)) -+ -+#ifndef INADDR_NONE -+# define INADDR_NONE ((unsigned long int) -1) -+#endif -+ -+ - /* {{{ FETCH_LONG_OPTION(var_name, option_name) */ - #define FETCH_LONG_OPTION(var_name, option_name) \ - var_name = 0; \ - var_name##_set = 0; \ - if (option_array) { \ - if (zend_hash_find(HASH_OF(option_array), option_name, sizeof(option_name), (void **) &option_val) == SUCCESS) { \ -- convert_to_long(*option_val); \ -- var_name = Z_LVAL_PP(option_val); \ -+ PHP_FILTER_GET_LONG_OPT(option_val, var_name); \ - var_name##_set = 1; \ - } \ - } -@@ -44,10 +56,11 @@ - var_name##_len = 0; \ - if (option_array) { \ - if (zend_hash_find(HASH_OF(option_array), option_name, sizeof(option_name), (void **) &option_val) == SUCCESS) { \ -- convert_to_string(*option_val); \ -- var_name = Z_STRVAL_PP(option_val); \ -- var_name##_set = 1; \ -- var_name##_len = Z_STRLEN_PP(option_val); \ -+ if (Z_TYPE_PP(option_val) == IS_STRING) { \ -+ var_name = Z_STRVAL_PP(option_val); \ -+ var_name##_len = Z_STRLEN_PP(option_val); \ -+ var_name##_set = 1; \ -+ } \ - } \ - } - /* }}} */ -@@ -55,24 +68,14 @@ - #define FORMAT_IPV4 4 - #define FORMAT_IPV6 6 - --#define RETURN_VALIDATION_FAILED \ -- zval_dtor(value); \ -- if (flags & FILTER_NULL_ON_FAILURE) { \ -- ZVAL_NULL(value); \ -- } else { \ -- ZVAL_FALSE(value); \ -- } \ -- return; \ -- - static int php_filter_parse_int(const char *str, unsigned int str_len, long *ret TSRMLS_DC) { /* {{{ */ -- long ctx_value = 0; -+ long ctx_value; - long sign = 1; -- int error = 0; -- const char *end; -+ const char *end = str + str_len; -+ double dval; -+ long overflow; - -- end = str + str_len; -- -- switch(*str) { -+ switch (*str) { - case ''-'': - sign = -1; - case ''+'': -@@ -82,88 +85,79 @@ - } - - /* must start with 1..9*/ -- if (*str >= ''1'' && *str <= ''9'') { -- ctx_value += ((*str) - ''0''); -- str++; -+ if (str < end && *str >= ''1'' && *str <= ''9'') { -+ ctx_value = ((*(str++)) - ''0''); - } else { - return -1; - } - -- if (str_len == 1 ) { -- *ret = ctx_value; -- return 1; -- } -- -- while (*str) { -+ while (str < end) { - if (*str >= ''0'' && *str <= ''9'') { -- ctx_value *= 10; -- ctx_value += ((*str) - ''0''); -- str++; -+ ZEND_SIGNED_MULTIPLY_LONG(ctx_value, 10, ctx_value, dval, overflow); -+ if (overflow) { -+ return -1; -+ } -+ ctx_value += ((*(str++)) - ''0''); -+ if (ctx_value & LONG_SIGN_MASK) { -+ return -1; -+ } - } else { -- error = 1; -- break; -+ return -1; - } - } - -- /* state "tail" */ -- if (!error && *str == ''\0'' && str == end) { -- *ret = ctx_value * sign; -- return 1; -- } else { -- return -1; -- } -+ *ret = ctx_value * sign; -+ return 1; - } - /* }}} */ - - static int php_filter_parse_octal(const char *str, unsigned int str_len, long *ret TSRMLS_DC) { /* {{{ */ -- long ctx_value = 0; -- int error = 0; -+ unsigned long ctx_value = 0; -+ const char *end = str + str_len; - -- while (*str) { -+ while (str < end) { - if (*str >= ''0'' && *str <= ''7'') { -- ctx_value *= 8; -- ctx_value += ((*str) - ''0''); -- str++; -+ unsigned long n = ((*(str++)) - ''0''); -+ -+ if ((ctx_value > ((unsigned long)(~(long)0)) / 8) || -+ ((ctx_value = ctx_value * 8) > ((unsigned long)(~(long)0)) - n)) { -+ return -1; -+ } -+ ctx_value += n; - } else { -- error = 1; -- break; -+ return -1; - } - } -- if (!error && *str == ''\0'') { -- *ret = ctx_value; -- return 1; -- } else { -- return -1; -- } -+ -+ *ret = (long)ctx_value; -+ return 1; - } - /* }}} */ - - static int php_filter_parse_hex(const char *str, unsigned int str_len, long *ret TSRMLS_DC) { /* {{{ */ -- long ctx_value = 0; -- int error = 0; -+ unsigned long ctx_value = 0; -+ const char *end = str + str_len; -+ unsigned long n; - -- while (*str) { -- if ((*str >= ''0'' && *str <= ''9'') || (*str >= ''a'' && *str <= ''f'') || (*str >= ''A'' && *str <= ''F'')) { -- ctx_value *= 16; -- if (*str >= ''0'' && *str <= ''9'') { -- ctx_value += ((*str) - ''0''); -- } else if (*str >= ''a'' && *str <= ''f'') { -- ctx_value += 10 + ((*str) - ''a''); -- } else if (*str >= ''A'' && *str <= ''F'') { -- ctx_value += 10 + ((*str) - ''A''); -- } -- str++; -+ while (str < end) { -+ if (*str >= ''0'' && *str <= ''9'') { -+ n = ((*(str++)) - ''0''); -+ } else if (*str >= ''a'' && *str <= ''f'') { -+ n = ((*(str++)) - (''a'' - 10)); -+ } else if (*str >= ''A'' && *str <= ''F'') { -+ n = ((*(str++)) - (''A'' - 10)); - } else { -- error = 1; -- break; -+ return -1; - } -+ if ((ctx_value > ((unsigned long)(~(long)0)) / 16) || -+ ((ctx_value = ctx_value * 16) > ((unsigned long)(~(long)0)) - n)) { -+ return -1; -+ } -+ ctx_value += n; - } -- if (!error && *str == ''\0'') { -- *ret = ctx_value; -- return 1; -- } else { -- return -1; -- } -+ -+ *ret = (long)ctx_value; -+ return 1; - } - /* }}} */ - -@@ -175,7 +169,7 @@ - int allow_octal = 0, allow_hex = 0; - int len, error = 0; - long ctx_value; -- char *p, *start, *end; -+ char *p; - - /* Parse options */ - FETCH_LONG_OPTION(min_range, "min_range"); -@@ -200,12 +194,12 @@ - p = Z_STRVAL_P(value); - ctx_value = 0; - -- PHP_FILTER_TRIM_DEFAULT(p, len, end); -+ PHP_FILTER_TRIM_DEFAULT(p, len); - - if (*p == ''0'') { -- p++; -+ p++; len--; - if (allow_hex && (*p == ''x'' || *p == ''X'')) { -- p++; -+ p++; len--; - if (php_filter_parse_hex(p, len, &ctx_value TSRMLS_CC) < 0) { - error = 1; - } -@@ -213,7 +207,7 @@ - if (php_filter_parse_octal(p, len, &ctx_value TSRMLS_CC) < 0) { - error = 1; - } -- } else if (len != 1) { -+ } else if (len != 0) { - error = 1; - } - } else { -@@ -236,34 +230,65 @@ - void php_filter_boolean(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */ - { - char *str = Z_STRVAL_P(value); -- char *start, *end; - int len = Z_STRLEN_P(value); -+ int ret; - -- if (len>0) { -- PHP_FILTER_TRIM_DEFAULT(str, len, end); -- } else { -- RETURN_VALIDATION_FAILED -- } -+ PHP_FILTER_TRIM_DEFAULT(str, len); - - /* returns true for "1", "true", "on" and "yes" - * returns false for "0", "false", "off", "no", and "" - * null otherwise. */ -- if ((strncasecmp(str, "true", sizeof("true")) == 0) || -- (strncasecmp(str, "yes", sizeof("yes")) == 0) || -- (strncasecmp(str, "on", sizeof("on")) == 0) || -- (strncmp(str, "1", sizeof("1")) == 0)) -- { -- zval_dtor(value); -- ZVAL_BOOL(value, 1); -- } else if ((strncasecmp(str, "false", sizeof("false")) == 0) || -- (strncasecmp(str, "no", sizeof("no")) == 0) || -- (strncasecmp(str, "off", sizeof("off")) == 0) || -- (strncmp(str, "0", sizeof("0")) == 0)) -- { -- zval_dtor(value); -- ZVAL_BOOL(value, 0); -- } else { -+ switch (len) { -+ case 1: -+ if (*str == ''1'') { -+ ret = 1; -+ } else if (*str == ''0'') { -+ ret = 0; -+ } else { -+ ret = -1; -+ } -+ break; -+ case 2: -+ if (strncasecmp(str, "on", 2) == 0) { -+ ret = 1; -+ } else if (strncasecmp(str, "no", 2) == 0) { -+ ret = 0; -+ } else { -+ ret = -1; -+ } -+ break; -+ case 3: -+ if (strncasecmp(str, "yes", 3) == 0) { -+ ret = 1; -+ } else if (strncasecmp(str, "off", 3) == 0) { -+ ret = 0; -+ } else { -+ ret = -1; -+ } -+ break; -+ case 4: -+ if (strncasecmp(str, "true", 4) == 0) { -+ ret = 1; -+ } else { -+ ret = -1; -+ } -+ break; -+ case 5: -+ if (strncasecmp(str, "false", 5) == 0) { -+ ret = 0; -+ } else { -+ ret = -1; -+ } -+ break; -+ default: -+ ret = -1; -+ } -+ -+ if (ret == -1) { - RETURN_VALIDATION_FAILED -+ } else { -+ zval_dtor(value); -+ ZVAL_BOOL(value, ret); - } - } - /* }}} */ -@@ -271,168 +296,102 @@ - void php_filter_float(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */ - { - int len; -- char *str, *start, *end; -+ char *str, *end; -+ char *num, *p; - - zval **option_val; - char *decimal; -- char dec_sep = ''\0''; -- -- const char default_decimal[] = "."; - int decimal_set, decimal_len; -- -+ char dec_sep = ''.''; - char tsd_sep[3] = "'',."; - -- long options_flag; -- int options_flag_set; -- -- int sign = 1; -+ long lval; -+ double dval; - -- double ret_val = 0; -- double factor; -- -- int exp_value = 0, exp_multiply = 1; -+ int first, n; - - len = Z_STRLEN_P(value); -- -- if (len < 1) { -- RETURN_VALIDATION_FAILED -- } -- - str = Z_STRVAL_P(value); -- start = str; - -- if (len == 1) { -- if (*str >= ''0'' && *str <= ''9'') { -- ret_val = (double)*str - ''0''; -- } else if (*str == ''E'' || *str == ''e'') { -- ret_val = 0; -- } -- zval_dtor(value); -- Z_TYPE_P(value) = IS_DOUBLE; -- Z_DVAL_P(value) = ret_val; -- return; -- } -+ PHP_FILTER_TRIM_DEFAULT(str, len); -+ end = str + len; - - FETCH_STRING_OPTION(decimal, "decimal"); -- FETCH_LONG_OPTION(options_flag, "flags"); - - if (decimal_set) { -- if (decimal_len > 1) { -+ if (decimal_len != 1) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "decimal separator must be one char"); -+ RETURN_VALIDATION_FAILED - } else { - dec_sep = *decimal; - } -- } else { -- dec_sep = *default_decimal; -- } -- -- PHP_FILTER_TRIM_DEFAULT(str, len, end); -- -- if (*str == ''-'') { -- sign = -1; -- str++; -- start = str; -- } else if (*str == ''+'') { -- sign = 1; -- str++; -- start = str; -- } -- -- ret_val = 0.0; -- -- while (*str == ''0'') { -- str++; -- } -- -- if (*str == dec_sep) { -- str++; -- goto stateDot; -- } -- -- ret_val = 0; -- -- if (str != start) { -- str--; -- } -- -- while (*str && *str != dec_sep) { -- if ((options_flag & FILTER_FLAG_ALLOW_THOUSAND) && (*str == tsd_sep[0] || *str == tsd_sep[1] || *str == tsd_sep[2])) { -- str++; -- continue; -- } -- -- if (*str == ''e'' || *str == ''E'') { -- goto stateExp; -- } -- -- if (*str < ''0'' || *str > ''9'') { -- goto stateError; -- } -- -- ret_val *=10; ret_val += (*str - ''0''); -- str++; -- } -- if (!(*str)) { -- goto stateT; - } -- str++; - --stateDot: -- factor = 0.1; -- while (*str) { -- if (*str == ''e'' || *str == ''E'') { -- goto stateExp; -+ num = p = emalloc(len+1); -+ if (str < end && (*str == ''+'' || *str == ''-'')) { -+ *p++ = *str++; -+ } -+ first = 1; -+ while (1) { -+ n = 0; -+ while (str < end && *str >= ''0'' && *str <= ''9'') { -+ ++n; -+ *p++ = *str++; -+ } -+ if (str == end || *str == dec_sep || *str == ''e'' || *str == ''E'') { -+ if (!first && n != 3) { -+ goto error; -+ } -+ if (*str == dec_sep) { -+ *p++ = ''.''; -+ str++; -+ while (str < end && *str >= ''0'' && *str <= ''9'') { -+ *p++ = *str++; -+ } -+ } -+ if (*str == ''e'' || *str == ''E'') { -+ *p++ = *str++; -+ if (str < end && (*str == ''+'' || *str == ''-'')) { -+ *p++ = *str++; -+ } -+ while (str < end && *str >= ''0'' && *str <= ''9'') { -+ *p++ = *str++; -+ } -+ } -+ break; - } -- -- if (*str < ''0'' || *str > ''9'') { -- goto stateError; -+ if ((flags & FILTER_FLAG_ALLOW_THOUSAND) && (*str == tsd_sep[0] || *str == tsd_sep[1] || *str == tsd_sep[2])) { -+ if (first?(n < 1 || n > 3):(n != 3)) { -+ goto error; -+ } -+ first = 0; -+ str++; -+ } else { -+ goto error; - } -- -- ret_val += factor * (*str - ''0''); -- factor /= 10; -- str++; - } -- if (!(*str)) { -- goto stateT; -+ if (str != end) { -+ goto error; - } -+ *p = 0; - --stateExp: -- str++; -- switch (*str) { -- case ''-'': -- exp_multiply = -1; -- str++; -+ switch (is_numeric_string(num, p - num, &lval, &dval, 0)) { -+ case IS_LONG: -+ zval_dtor(value); -+ Z_TYPE_P(value) = IS_DOUBLE; -+ Z_DVAL_P(value) = lval; - break; -- case ''+'': -- exp_multiply = 1; -- str++; -- } -- -- while (*str) { -- if (*str < ''0'' || *str > ''9'') { -- goto stateError; -- } -- exp_value *= 10; -- exp_value += ((*str) - ''0''); -- str++; -- } -- --stateT: -- if ((str -1) != end) { -- goto stateError; -- } -- if (exp_value) { -- exp_value *= exp_multiply; -- ret_val *= pow(10, exp_value); -+ case IS_DOUBLE: -+ zval_dtor(value); -+ Z_TYPE_P(value) = IS_DOUBLE; -+ Z_DVAL_P(value) = dval; -+ break; -+ default: -+error: -+ efree(num); -+ RETURN_VALIDATION_FAILED - } -- -- zval_dtor(value); -- Z_TYPE_P(value) = IS_DOUBLE; -- Z_DVAL_P(value) = sign * ret_val; -- return; -- --stateError: -- RETURN_VALIDATION_FAILED -+ efree(num); - } - /* }}} */ - -@@ -476,6 +435,13 @@ - void php_filter_validate_url(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */ - { - php_url *url; -+ int old_len = Z_STRLEN_P(value); -+ -+ php_filter_url(value, flags, option_array, charset TSRMLS_CC); -+ -+ if (Z_TYPE_P(value) != IS_STRING || old_len != Z_STRLEN_P(value)) { -+ RETURN_VALIDATION_FAILED -+ } - - /* Use parse_url - if it returns false, we return NULL */ - url = php_url_parse_ex(Z_STRVAL_P(value), Z_STRLEN_P(value)); -@@ -485,10 +451,10 @@ - } - - if ( -- ((flags & FILTER_FLAG_SCHEME_REQUIRED) && url->scheme == NULL) || -- ((flags & FILTER_FLAG_HOST_REQUIRED) && url->host == NULL) || -- ((flags & FILTER_FLAG_PATH_REQUIRED) && url->path == NULL) || -- ((flags & FILTER_FLAG_QUERY_REQUIRED) && url->query == NULL) -+ url->scheme == NULL || -+ /* some schemas allow the host to be empty */ -+ (url->host == NULL && (strcmp(url->scheme, "mailto") && strcmp(url->scheme, "news") && strcmp(url->scheme, "file"))) || -+ ((flags & FILTER_FLAG_PATH_REQUIRED) && url->path == NULL) || ((flags & FILTER_FLAG_QUERY_REQUIRED) && url->query == NULL) - ) { - php_url_free(url); - RETURN_VALIDATION_FAILED -@@ -500,7 +466,7 @@ - void php_filter_validate_email(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */ - { - /* From http://cvs.php.net/co.php/pear/HTML_QuickForm/QuickForm/Rule/Email.php?r=1.4 */ -- const char regexp[] = "/^((\\\"[^\\\"\\f\\n\\r\\t\\v\\b]+\\\")|([\\w\\!\\#\\$\\%\\&\\''\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]+(\\.[\\w\\!\\#\\$\\%\\&\\''\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]+)*))@((\\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9\\-])+\\.)+[A-Za-z\\-]+))$/"; -+ const char regexp[] = "/^((\\\"[^\\\"\\f\\n\\r\\t\\b]+\\\")|([\\w\\!\\#\\$\\%\\&\\''\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]+(\\.[\\w\\!\\#\\$\\%\\&\\''\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]+)*))@((\\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9\\-])+\\.)+[A-Za-z\\-]+))$/"; - - pcre *re = NULL; - pcre_extra *pcre_extra = NULL; -@@ -523,220 +489,97 @@ - } - /* }}} */ - --static int _php_filter_validate_ipv4_count_dots(char *str) /* {{{ */ --{ -- char *s1, *s2, *s3, *s4; -- -- s1 = strchr(str, ''.''); -- if (!s1) -- return 0; -- s2 = strchr(s1 + 1, ''.''); -- if (!s2) -- return 1; -- s3 = strchr(s2 + 1, ''.''); -- if (!s3) -- return 2; -- s4 = strchr(s3 + 1, ''.''); -- if (!s4) -- return 3; -- return 4; /* too many */ --} --/* }}} */ -- --static int _php_filter_validate_ipv4_get_nr(char **str) /* {{{ */ --{ -- char *begin, *end, *ptr, *tmp_str; -- int tmp_nr = -1; -- -- begin = ptr = *str; -- while ((*ptr >= ''0'') && (*ptr <= ''9'')) { -- ++ptr; -- } -- end = ptr; -- *str = end + 1; -- -- if (end == begin) { -- return -1; -- } -- -- tmp_str = calloc(1, end - begin + 1); -- memcpy(tmp_str, begin, end - begin); -- tmp_nr = strtol(tmp_str, NULL, 10); -- free(tmp_str); -- -- if (tmp_nr < 0 || tmp_nr > 255) { -- tmp_nr = -1; -- } -- return tmp_nr; --} --/* }}} */ -- --static int _php_filter_validate_ipv4(char *str, int *ip TSRMLS_DC) /* {{{ */ -+static int _php_filter_validate_ipv4(char *str, int str_len, int *ip) /* {{{ */ - { -- char *p; -- int x; -+ const char *end = str + str_len; -+ int num, m; -+ int n = 0; - -- if (_php_filter_validate_ipv4_count_dots(str) != 3) { -- return 0; -- } -- -- p = str; -- for (x = 0; x < 4; ++x) { -- ip[x] = _php_filter_validate_ipv4_get_nr(&p); -- if (ip[x] == -1) { -+ while (str < end) { -+ if (*str < ''0'' || *str > ''9'') { -+ return 0; -+ } -+ m = 1; -+ num = ((*(str++)) - ''0''); -+ while (str < end && (*str >= ''0'' && *str <= ''9'')) { -+ num = num * 10 + ((*(str++)) - ''0''); -+ if (num > 255 || ++m > 3) { -+ return 0; -+ } -+ } -+ ip[n++] = num; -+ if (n == 4) { -+ return str == end; -+ } else if (str >= end || *(str++) != ''.'') { - return 0; - } - } -- return 1; -+ return 0; - } - /* }}} */ - --#define IS_HEX(s) if (!((s >= ''0'' && s <= ''9'') || (s >= ''a'' && s <= ''f'') ||(s >= ''A'' && s <= ''F''))) { \ -- return 0; \ --} -- --#define IPV6_LOOP_IN(str) \ -- if (*str == '':'') { \ -- if (hexcode_found > 4) { \ -- return -134; \ -- } \ -- hexcode_found = 0; \ -- col_fnd++; \ -- } else { \ -- IS_HEX(*str); \ -- hexcode_found++; \ -- } -- --static int _php_filter_validate_ipv6_(char *str TSRMLS_DC) /* {{{ */ -+static int _php_filter_validate_ipv6(char *str, int str_len TSRMLS_DC) /* {{{ */ - { -- int hexcode_found = 0; -- int compressed_2end = 0; -- int col_fnd = 0; -- char *start = str; -- char *compressed = NULL, *t = str; -- char *s2 = NULL, *ipv4=NULL; -+ int compressed = 0; -+ int blocks = 8; -+ int n; -+ char *ipv4; -+ char *end; - int ip4elm[4]; - -- if (!strchr(str, '':'')) { -+ if (!memchr(str, '':'', str_len)) { - return 0; - } - -- /* Check for compressed expression. only one is allowed */ -- compressed = strstr(str, "::"); -- if (compressed) { -- s2 = strstr(compressed+1, "::"); -- if (s2) { -- return 0; -- } -- } -- - /* check for bundled IPv4 */ -- ipv4 = strchr(str, ''.''); -- -+ ipv4 = memchr(str, ''.'', str_len); - if (ipv4) { -- while (*ipv4 != '':'' && ipv4 >= start) { -+ while (ipv4 > str && *(ipv4-1) != '':'') { - ipv4--; - } - -- /* ::w.x.y.z */ -- if (compressed && ipv4 == (compressed + 1)) { -- compressed_2end = 1; -- } -- ipv4++; -- -- if (!_php_filter_validate_ipv4(ipv4, ip4elm TSRMLS_CC)) { -+ if (!_php_filter_validate_ipv4(ipv4, (str_len - (ipv4 - str)), ip4elm)) { - return 0; - } -- -- if (compressed_2end) { -- return 1; -+ str_len = (ipv4 - str) - 1; -+ if (str_len == 1) { -+ return *str == '':''; - } -+ blocks = 6; - } - -- if (!compressed) { -- char *end; -- if (ipv4) { -- end = ipv4 - 1; -- } else { -- end = str + strlen(start); -- } -- -- while (*str && str <= end) { -- IPV6_LOOP_IN(str); -- str++; -- } -- -- if (!ipv4) { -- if (col_fnd != 7) { -- return 0; -- } else { -- return 1; -- } -- } else { -- if (col_fnd != 6) { -- return -1230; -- } else { -- return 1; -- } -- } -- } else { -- if (!ipv4) { -- t = compressed - 1; -- while (t >= start) { -- IPV6_LOOP_IN(t); -- t--; -- } -- -- if (hexcode_found > 4) { -- return 0; -- } -- -- t = compressed + 2; -- hexcode_found = 0; -- while (*t) { -- IPV6_LOOP_IN(t); -- t++; -- } -- -- if (hexcode_found > 4) { -- return 0; -- } -- -- if (col_fnd > 6) { -- return 0; -- } else { -- return 1; -- } -- } else { -- /* ipv4 part always at the end */ -- t = ipv4 - 1; -- while (t >= (compressed + 2)) { -- IPV6_LOOP_IN(t); -- t--; -- } -- -- if (hexcode_found > 4) { -+ end = str + str_len; -+ while (str < end) { -+ if (*str == '':'') { -+ if (--blocks == 0) { - return 0; -- } -- -- hexcode_found = 0; -- t = compressed - 1; -- while (t >= start) { -- IPV6_LOOP_IN(t); -- t--; -- } -- if (hexcode_found > 4) { -+ } -+ if (++str >= end) { - return 0; - } -- -- if (col_fnd > 6) { -- return 0; -- } else { -- return 1; -- } -+ if (*str == '':'') { -+ if (compressed || --blocks == 0) { -+ return 0; -+ } -+ if (++str == end) { -+ return 1; -+ } -+ compressed = 1; -+ } -+ } -+ n = 0; -+ while ((str < end) && -+ ((*str >= ''0'' && *str <= ''9'') || -+ (*str >= ''a'' && *str <= ''f'') || -+ (*str >= ''A'' && *str <= ''F''))) { -+ n++; -+ str++; -+ } -+ if (n < 1 || n > 4) { -+ return 0; - } - } -- return 0; -+ return (compressed || blocks == 1); - } - /* }}} */ - -@@ -771,7 +614,7 @@ - - switch (mode) { - case FORMAT_IPV4: -- if (!_php_filter_validate_ipv4(str, ip TSRMLS_CC)) { -+ if (!_php_filter_validate_ipv4(str, Z_STRLEN_P(value), ip)) { - RETURN_VALIDATION_FAILED - } - -@@ -801,7 +644,7 @@ - case FORMAT_IPV6: - { - int res = 0; -- res = _php_filter_validate_ipv6_(str TSRMLS_CC); -+ res = _php_filter_validate_ipv6(str, Z_STRLEN_P(value) TSRMLS_CC); - if (res < 1) { - RETURN_VALIDATION_FAILED - } -Index: php5-5.2.0/ext/filter/filter_private.h -==================================================================---- php5-5.2.0.orig/ext/filter/filter_private.h 2006-10-17 17:26:14.000000000 +0200 -+++ php5-5.2.0/ext/filter/filter_private.h 2007-04-23 20:22:47.000000000 +0200 -@@ -81,27 +81,38 @@ - - #define FILTER_CALLBACK 0x0400 - --#define PHP_FILTER_TRIM_DEFAULT(p, len, end) { \ -- while (*p == '' '' || *p == ''\t'' || *p == ''\r'' || *p == ''\v'') { \ -+#define RETURN_VALIDATION_FAILED \ -+ zval_dtor(value); \ -+ if (flags & FILTER_NULL_ON_FAILURE) { \ -+ ZVAL_NULL(value); \ -+ } else { \ -+ ZVAL_FALSE(value); \ -+ } \ -+ return; \ -+ -+#define PHP_FILTER_TRIM_DEFAULT(p, len) { \ -+ while ((len > 0) && (*p == '' '' || *p == ''\t'' || *p == ''\r'' || *p == ''\v'' || *p == ''\n'')) { \ - p++; \ - len--; \ - } \ -- start = p; \ -- end = p + len - 1; \ -- if (*end == '' '' || *end == ''\t'' || *end == ''\r'' || *end == ''\v'') { \ -- unsigned int i; \ -- for (i = len - 1; i >= 0; i--) { \ -- if (!(p[i] == '' '' || p[i] == ''\t'' || p[i] == ''\r'' || p[i] == ''\v'')) { \ -- break; \ -- } \ -- } \ -- i++; \ -- p[i] = ''\0''; \ -- end = p + i - 1; \ -- len = (int) (end - p) + 1; \ -+ if (len < 1) { \ -+ RETURN_VALIDATION_FAILED \ -+ } \ -+ while (p[len-1] == '' '' || p[len-1] == ''\t'' || p[len-1] == ''\r'' || p[len-1] == ''\v'' || p[len-1] == ''\n'') { \ -+ len--; \ - } \ - } - -+#define PHP_FILTER_GET_LONG_OPT(zv, opt) { \ -+ if (Z_TYPE_PP(zv) != IS_LONG) { \ -+ zval tmp = **zv; \ -+ zval_copy_ctor(&tmp); \ -+ convert_to_long(&tmp); \ -+ opt = Z_LVAL(tmp); \ -+ } else { \ -+ opt = Z_LVAL_PP(zv); \ -+ } \ -+} - - #endif /* FILTER_PRIVATE_H */ - -Index: php5-5.2.0/ext/standard/php_string.h -==================================================================---- php5-5.2.0.orig/ext/standard/php_string.h 2007-04-23 20:46:25.000000000 +0200 -+++ php5-5.2.0/ext/standard/php_string.h 2007-04-23 20:49:04.000000000 +0200 -@@ -132,6 +132,7 @@ - int needle_len, char *str, int str_len, int *_new_length); - PHPAPI char *php_trim(char *c, int len, char *what, int what_len, zval *return_value, int mode TSRMLS_DC); - PHPAPI size_t php_strip_tags(char *rbuf, int len, int *state, char *allow, int allow_len); -+PHPAPI size_t php_strip_tags_ex(char *rbuf, int len, int *stateptr, char *allow, int allow_len, zend_bool allow_tag_spaces); - PHPAPI int php_char_to_str_ex(char *str, uint len, char from, char *to, int to_len, zval *result, int case_sensitivity, int *replace_count); - PHPAPI int php_char_to_str(char *str, uint len, char from, char *to, int to_len, zval *result); - PHPAPI void php_implode(zval *delim, zval *arr, zval *return_value TSRMLS_DC); -Index: php5-5.2.0/ext/standard/string.c -==================================================================---- php5-5.2.0.orig/ext/standard/string.c 2007-04-23 20:25:58.000000000 +0200 -+++ php5-5.2.0/ext/standard/string.c 2007-04-23 20:45:31.000000000 +0200 -@@ -1230,11 +1230,11 @@ - } - - len = cend - comp; -- ret = emalloc(len + 1); -- memcpy(ret, comp, len); -- ret[len] = ''\0''; - - if (p_ret) { -+ ret = emalloc(len + 1); -+ memcpy(ret, comp, len); -+ ret[len] = ''\0''; - *p_ret = ret; - } - if (p_len) { -@@ -1876,6 +1876,8 @@ - - if (offset >= 0) { - if (offset > haystack_len) { -+ efree(needle_dup); -+ efree(haystack_dup); - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Offset is greater than the length of haystack string"); - RETURN_FALSE; - } -@@ -1883,6 +1885,8 @@ - e = haystack_dup + haystack_len - needle_len; - } else { - if (-offset > haystack_len) { -+ efree(needle_dup); -+ efree(haystack_dup); - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Offset is greater than the length of haystack string"); - RETURN_FALSE; - } -@@ -3872,7 +3876,7 @@ - } - convert_to_string_ex(str); - buf = estrndup(Z_STRVAL_PP(str), Z_STRLEN_PP(str)); -- retval_len = php_strip_tags(buf, Z_STRLEN_PP(str), NULL, allowed_tags, allowed_tags_len); -+ retval_len = php_strip_tags_ex(buf, Z_STRLEN_PP(str), NULL, allowed_tags, allowed_tags_len, 0); - RETURN_STRINGL(buf, retval_len, 0); - } - /* }}} */ -@@ -4026,7 +4030,13 @@ - int php_tag_find(char *tag, int len, char *set) { - char c, *n, *t; - int state=0, done=0; -- char *norm = emalloc(len+1); -+ char *norm; -+ -+ if (len <= 0) { -+ return 0; -+ } -+ -+ norm = emalloc(len+1); - - n = norm; - t = tag; -@@ -4036,9 +4046,6 @@ - and turn any <a whatever...> into just <a> and any </tag> - into <tag> - */ -- if (!len) { -- return 0; -- } - while (!done) { - switch (c) { - case ''<'': -@@ -4076,6 +4083,11 @@ - } - /* }}} */ - -+PHPAPI size_t php_strip_tags(char *rbuf, int len, int *stateptr, char *allow, int allow_len) -+{ -+ return php_strip_tags_ex(rbuf, len, stateptr, allow, allow_len, 0); -+} -+ - /* {{{ php_strip_tags - - A simple little state-machine to strip out html and php tags -@@ -4096,10 +4108,10 @@ - swm: Added ability to strip <?xml tags without assuming it PHP - code. - */ --PHPAPI size_t php_strip_tags(char *rbuf, int len, int *stateptr, char *allow, int allow_len) -+PHPAPI size_t php_strip_tags_ex(char *rbuf, int len, int *stateptr, char *allow, int allow_len, zend_bool allow_tag_spaces) - { - char *tbuf, *buf, *p, *tp, *rp, c, lc; -- int br, i=0, depth=0; -+ int br, i=0, depth=0, in_q = 0; - int state = 0; - - if (stateptr) -@@ -4124,7 +4136,7 @@ - case ''\0'': - break; - case ''<'': -- if (isspace(*(p + 1))) { -+ if (isspace(*(p + 1)) && !allow_tag_spaces) { - goto reg_char; - } - if (state == 0) { -@@ -4133,7 +4145,7 @@ - if (allow) { - tp = ((tp-tbuf) >= PHP_TAG_BUF_SIZE ? tbuf: tp); - *(tp++) = ''<''; -- } -+ } - } else if (state == 1) { - depth++; - } -@@ -4172,7 +4184,11 @@ - depth--; - break; - } -- -+ -+ if (in_q) { -+ break; -+ } -+ - switch (state) { - case 1: /* HTML/XML */ - lc = ''>''; -@@ -4228,6 +4244,9 @@ - tp = ((tp-tbuf) >= PHP_TAG_BUF_SIZE ? tbuf: tp); - *(tp++) = c; - } -+ if (p != buf && *(p-1) != ''\\'') { -+ in_q = !in_q; -+ } - break; - - case ''!'': Deleted: data/patches/MOPB/MOPB-22-php5.diff ==================================================================--- data/patches/MOPB/MOPB-22-php5.diff 2011-01-18 02:17:33 UTC (rev 15915) +++ data/patches/MOPB/MOPB-22-php5.diff 2011-01-18 02:17:42 UTC (rev 15916) @@ -1,19 +0,0 @@ -# http://cvs.php.net/viewvc.cgi/php-src/ext/session/session.c?r1=1.417.2.8.2.31&r2=1.417.2.8.2.32&pathrev=PHP_5_2&view=patch ---- php-src/ext/session/session.c 2007/03/03 15:07:31 1.417.2.8.2.31 -+++ php-src/ext/session/session.c 2007/03/14 19:37:07 1.417.2.8.2.32 -@@ -846,6 +846,7 @@ - } else if (PS(invalid_session_id)) { /* address instances where the session read fails due to an invalid id */ - PS(invalid_session_id) = 0; - efree(PS(id)); -+ PS(id) = NULL; - goto new_session; - } - } -@@ -1575,6 +1576,7 @@ - RETURN_FALSE; - } - efree(PS(id)); -+ PS(id) = NULL; - } - - PS(id) = PS(mod)->s_create_sid(&PS(mod_data), NULL TSRMLS_CC); Deleted: data/patches/MOPB/MOPB-24-php5.diff ==================================================================--- data/patches/MOPB/MOPB-24-php5.diff 2011-01-18 02:17:33 UTC (rev 15915) +++ data/patches/MOPB/MOPB-24-php5.diff 2011-01-18 02:17:42 UTC (rev 15916) @@ -1,61 +0,0 @@ -# http://cvs.php.net/viewvc.cgi/php-src/ext/standard/array.c?r1=1.308.2.21.2.24&r2=1.308.2.21.2.25&pathrev=PHP_5_2&view=patch ---- php-src/ext/standard/array.c 2007/03/04 17:21:16 1.308.2.21.2.24 -+++ php-src/ext/standard/array.c 2007/03/16 19:38:58 1.308.2.21.2.25 -@@ -703,40 +703,40 @@ - { - Bucket *f; - Bucket *s; -- zval key1, key2; -+ zval *key1, *key2; - zval *args[2]; - zval retval; - int status; - -- args[0] = &key1; -- args[1] = &key2; -- INIT_PZVAL(&key1); -- INIT_PZVAL(&key2); -+ ALLOC_INIT_ZVAL(key1); -+ ALLOC_INIT_ZVAL(key2); -+ args[0] = key1; -+ args[1] = key2; - - f = *((Bucket **) a); - s = *((Bucket **) b); - - if (f->nKeyLength) { -- Z_STRVAL(key1) = estrndup(f->arKey, f->nKeyLength-1); -- Z_STRLEN(key1) = f->nKeyLength-1; -- Z_TYPE(key1) = IS_STRING; -+ Z_STRVAL_P(key1) = estrndup(f->arKey, f->nKeyLength-1); -+ Z_STRLEN_P(key1) = f->nKeyLength-1; -+ Z_TYPE_P(key1) = IS_STRING; - } else { -- Z_LVAL(key1) = f->h; -- Z_TYPE(key1) = IS_LONG; -+ Z_LVAL_P(key1) = f->h; -+ Z_TYPE_P(key1) = IS_LONG; - } - if (s->nKeyLength) { -- Z_STRVAL(key2) = estrndup(s->arKey, s->nKeyLength-1); -- Z_STRLEN(key2) = s->nKeyLength-1; -- Z_TYPE(key2) = IS_STRING; -+ Z_STRVAL_P(key2) = estrndup(s->arKey, s->nKeyLength-1); -+ Z_STRLEN_P(key2) = s->nKeyLength-1; -+ Z_TYPE_P(key2) = IS_STRING; - } else { -- Z_LVAL(key2) = s->h; -- Z_TYPE(key2) = IS_LONG; -+ Z_LVAL_P(key2) = s->h; -+ Z_TYPE_P(key2) = IS_LONG; - } - - status = call_user_function(EG(function_table), NULL, *BG(user_compare_func_name), &retval, 2, args TSRMLS_CC); - -- zval_dtor(&key1); -- zval_dtor(&key2); -+ zval_ptr_dtor(&key1); -+ zval_ptr_dtor(&key2); - - if (status == SUCCESS) { - convert_to_long(&retval); Deleted: data/patches/MOPB/MOPB-26-php4.diff ==================================================================--- data/patches/MOPB/MOPB-26-php4.diff 2011-01-18 02:17:33 UTC (rev 15915) +++ data/patches/MOPB/MOPB-26-php4.diff 2011-01-18 02:17:42 UTC (rev 15916) @@ -1,36 +0,0 @@ ---- mbstring.c 2006/12/21 17:28:57 1.142.2.47.2.19 -+++ mbstring.c 2007/03/18 17:19:30 1.142.2.47.2.20 -@@ -17,7 +17,7 @@ - +----------------------------------------------------------------------+ - */ - --/* $Id: mbstring.c,v 1.142.2.47.2.19 2006/12/21 17:28:57 masugata Exp $ */ -+/* $Id: mbstring.c,v 1.142.2.47.2.20 2007/03/18 17:19:30 iliaa Exp $ */ - - /* - * PHP4 Multibyte String module "mbstring" -@@ -1954,9 +1954,9 @@ - string.no_encoding = from_encoding; - old_rg = PG(register_globals); - if (argc == 1) { -- PG(register_globals) = 1; -+ zend_alter_ini_entry("register_globals", sizeof("register_globals"), "1", sizeof("1")-1, PHP_INI_PERDIR, PHP_INI_STAGE_RUNTIME); - } else { -- PG(register_globals) = 0; -+ zend_alter_ini_entry("register_globals", sizeof("register_globals"), "0", sizeof("0")-1, PHP_INI_PERDIR, PHP_INI_STAGE_RUNTIME); - } - n = 0; - while (n < num) { -@@ -1985,7 +1985,11 @@ - mbfl_string_clear(&resvar); - mbfl_string_clear(&resval); - } -- PG(register_globals) = old_rg; -+ if (old_rg) { -+ zend_alter_ini_entry("register_globals", sizeof("register_globals"), "1", sizeof("1")-1, PHP_INI_PERDIR, PHP_INI_STAGE_RUNTIME); -+ } else { -+ zend_alter_ini_entry("register_globals", sizeof("register_globals"), "0", sizeof("0")-1, PHP_INI_PERDIR, PHP_INI_STAGE_RUNTIME); -+ } - - if (convd != NULL) { - MBSTRG(illegalchars) += mbfl_buffer_illegalchars(convd); Deleted: data/patches/MOPB/MOPB-26-php5.diff ==================================================================--- data/patches/MOPB/MOPB-26-php5.diff 2011-01-18 02:17:33 UTC (rev 15915) +++ data/patches/MOPB/MOPB-26-php5.diff 2011-01-18 02:17:42 UTC (rev 15916) @@ -1,34 +0,0 @@ ---- mb_gpc.c 2007/01/01 09:36:02 1.17.2.2.2.2 -+++ mb_gpc.c 2007/03/18 16:36:13 1.17.2.2.2.3 -@@ -17,7 +17,7 @@ - +----------------------------------------------------------------------+ - */ - --/* $Id: mb_gpc.c,v 1.17.2.2.2.2 2007/01/01 09:36:02 sebastian Exp $ */ -+/* $Id: mb_gpc.c,v 1.17.2.2.2.3 2007/03/18 16:36:13 iliaa Exp $ */ - - /* {{{ includes */ - #ifdef HAVE_CONFIG_H -@@ -208,9 +208,8 @@ - /* register_globals stuff - * XXX: this feature is going to be deprecated? */ - -- if (info->force_register_globals) { -- prev_rg_state = PG(register_globals); -- PG(register_globals) = 1; -+ if (info->force_register_globals && !(prev_rg_state = PG(register_globals))) { -+ zend_alter_ini_entry("register_globals", sizeof("register_globals"), "1", sizeof("1")-1, PHP_INI_PERDIR, PHP_INI_STAGE_RUNTIME); - } - - if (!res || *res == ''\0'') { -@@ -343,8 +342,8 @@ - - out: - /* register_global stuff */ -- if (info->force_register_globals) { -- PG(register_globals) = prev_rg_state; -+ if (info->force_register_globals && !prev_rg_state) { -+ zend_alter_ini_entry("register_globals", sizeof("register_globals"), "0", sizeof("0")-1, PHP_INI_PERDIR, PHP_INI_STAGE_RUNTIME); - } - - if (convd != NULL) { Deleted: data/patches/MOPB/MOPB-29-php5.diff ==================================================================--- data/patches/MOPB/MOPB-29-php5.diff 2011-01-18 02:17:33 UTC (rev 15915) +++ data/patches/MOPB/MOPB-29-php5.diff 2011-01-18 02:17:42 UTC (rev 15916) @@ -1,43 +0,0 @@ -# http://cvs.php.net/viewvc.cgi/php-src/ext/standard/var_unserializer.re?r1=1.52.2.2.2.1&r2=1.52.2.2.2.2&pathrev=PHP_5_2&view=patch ---- php-src/ext/standard/var_unserializer.re 2006/12/15 00:58:08 1.52.2.2.2.1 -+++ php-src/ext/standard/var_unserializer.re 2007/03/23 20:15:21 1.52.2.2.2.2 -@@ -138,12 +138,18 @@ - - /* }}} */ - --static char *unserialize_str(const unsigned char **p, int len) -+static char *unserialize_str(const unsigned char **p, size_t *len) - { -- int i, j; -- char *str = emalloc(len+1); -+ size_t i, j; -+ char *str = safe_emalloc(*len, 1, 1); -+ unsigned char *end = *p+*len; - -- for (i = 0; i < len; i++) { -+ if(end < *p) { -+ efree(str); -+ return NULL; -+ } -+ -+ for (i = 0; i < *len && *p < end; i++) { - if (**p != ''\\'') { - str[i] = (char)**p; - } else { -@@ -167,6 +173,7 @@ - (*p)++; - } - str[i] = 0; -+ *len = i; - return str; - } - -@@ -518,7 +525,7 @@ - return 0; - } - -- if ((str = unserialize_str(&YYCURSOR, len)) == NULL) { -+ if ((str = unserialize_str(&YYCURSOR, &len)) == NULL) { - return 0; - } - Deleted: data/patches/MOPB/MOPB-30-php5.diff ==================================================================--- data/patches/MOPB/MOPB-30-php5.diff 2011-01-18 02:17:33 UTC (rev 15915) +++ data/patches/MOPB/MOPB-30-php5.diff 2011-01-18 02:17:42 UTC (rev 15916) @@ -1,37 +0,0 @@ ---- old/ext/session/session.c 2006/12/04 15:58:48 1.417.2.8.2.20 -+++ new/ext/session/session.c 2006/12/26 16:53:47 1.417.2.8.2.22 -@@ -583,16 +598,20 @@ - zend_delete_global_variable("HTTP_SESSION_VARS", sizeof("HTTP_SESSION_VARS")-1 TSRMLS_CC); - zend_delete_global_variable("_SESSION", sizeof("_SESSION")-1 TSRMLS_CC); - -+ if (PS(http_session_vars)) { -+ zval_ptr_dtor(&PS(http_session_vars)); -+ } -+ - MAKE_STD_ZVAL(session_vars); - array_init(session_vars); - PS(http_session_vars) = session_vars; - - if (PG(register_long_arrays)) { -- ZEND_SET_GLOBAL_VAR_WITH_LENGTH("HTTP_SESSION_VARS", sizeof("HTTP_SESSION_VARS"), PS(http_session_vars), 2, 1); -- ZEND_SET_GLOBAL_VAR_WITH_LENGTH("_SESSION", sizeof("_SESSION"), PS(http_session_vars), 2, 1); -+ ZEND_SET_GLOBAL_VAR_WITH_LENGTH("HTTP_SESSION_VARS", sizeof("HTTP_SESSION_VARS"), PS(http_session_vars), 3, 1); -+ ZEND_SET_GLOBAL_VAR_WITH_LENGTH("_SESSION", sizeof("_SESSION"), PS(http_session_vars), 3, 1); - } - else { -- ZEND_SET_GLOBAL_VAR_WITH_LENGTH("_SESSION", sizeof("_SESSION"), PS(http_session_vars), 1, 0); -+ ZEND_SET_GLOBAL_VAR_WITH_LENGTH("_SESSION", sizeof("_SESSION"), PS(http_session_vars), 2, 1); - } - } - -@@ -1828,6 +1847,10 @@ - - static void php_rshutdown_session_globals(TSRMLS_D) - { -+ if (PS(http_session_vars)) { -+ zval_ptr_dtor(&PS(http_session_vars)); -+ PS(http_session_vars) = NULL; -+ } - if (PS(mod_data)) { - zend_try { - PS(mod)->s_close(&PS(mod_data) TSRMLS_CC); Deleted: data/patches/MOPB/MOPB-32-php4.diff ==================================================================--- data/patches/MOPB/MOPB-32-php4.diff 2011-01-18 02:17:33 UTC (rev 15915) +++ data/patches/MOPB/MOPB-32-php4.diff 2011-01-18 02:17:42 UTC (rev 15916) @@ -1,11 +0,0 @@ -diff -aur php-4.4.6/ext/session/session.c php-4.4.7RC1/ext/session/session.c ---- php-4.4.6/ext/session/session.c 2007-02-15 10:41:30.000000000 +0100 -+++ php-4.4.7RC1/ext/session/session.c 2007-04-04 21:52:26.000000000 +0200 -@@ -535,7 +535,6 @@ - - if (zend_hash_find(&EG(symbol_table), name, namelen + 1, (void **) &tmp) == SUCCESS) { - if ((Z_TYPE_PP(tmp) == IS_ARRAY && Z_ARRVAL_PP(tmp) == &EG(symbol_table)) || *tmp == PS(http_session_vars)) { -- efree(name); - goto skip; - } - } Deleted: data/patches/MOPB/MOPB-34-php5.diff ==================================================================--- data/patches/MOPB/MOPB-34-php5.diff 2011-01-18 02:17:33 UTC (rev 15915) +++ data/patches/MOPB/MOPB-34-php5.diff 2011-01-18 02:17:42 UTC (rev 15916) @@ -1,28 +0,0 @@ -# http://cvs.php.net/viewvc.cgi/php-src/ext/standard/mail.c?r1=1.87.2.1.2.4&r2=1.87.2.1.2.5&pathrev=PHP_5_2&view=patch -# http://cvs.php.net/viewvc.cgi/php-src/ext/mbstring/mbstring.c?r1=1.224.2.22.2.21&r2=1.224.2.22.2.22&pathrev=PHP_5_2&view=patch ---- php-src/ext/standard/mail.c 2007/03/27 09:20:27 1.87.2.1.2.4 -+++ php-src/ext/standard/mail.c 2007/03/30 00:28:58 1.87.2.1.2.5 -@@ -48,8 +48,8 @@ - - #define SKIP_LONG_HEADER_SEP(str, pos) \ - if (str[pos] == ''\r'' && str[pos + 1] == ''\n'' && (str[pos + 2] == '' '' || str[pos + 2] == ''\t'')) { \ -- pos += 3; \ -- while (str[pos] == '' '' || str[pos] == ''\t'') { \ -+ pos += 2; \ -+ while (str[pos + 1] == '' '' || str[pos + 1] == ''\t'') { \ - pos++; \ - } \ - continue; \ ---- php-src/ext/mbstring/mbstring.c 2007/02/24 02:17:24 1.224.2.22.2.21 -+++ php-src/ext/mbstring/mbstring.c 2007/04/04 15:25:41 1.224.2.22.2.22 -@@ -3301,8 +3301,8 @@ - - #define SKIP_LONG_HEADER_SEP_MBSTRING(str, pos) \ - if (str[pos] == ''\r'' && str[pos + 1] == ''\n'' && (str[pos + 2] == '' '' || str[pos + 2] == ''\t'')) { \ -- pos += 3; \ -- while (str[pos] == '' '' || str[pos] == ''\t'') { \ -+ pos += 2; \ -+ while (str[pos + 1] == '' '' || str[pos + 1] == ''\t'') { \ - pos++; \ - } \ - continue; \ Deleted: data/patches/MOPB/MOPB-35-php4.diff ==================================================================--- data/patches/MOPB/MOPB-35-php4.diff 2011-01-18 02:17:33 UTC (rev 15915) +++ data/patches/MOPB/MOPB-35-php4.diff 2011-01-18 02:17:42 UTC (rev 15916) @@ -1,31 +0,0 @@ ---- zip.c 2007/01/01 09:46:50 1.33.2.3.2.2 -+++ zip.c 2007/01/02 14:40:32 1.33.2.3.2.3 -@@ -16,7 +16,7 @@ - +----------------------------------------------------------------------+ - */ - --/* $Id: zip.c,v 1.33.2.3.2.2 2007/01/01 09:46:50 sebastian Exp $ */ -+/* $Id: zip.c,v 1.33.2.3.2.3 2007/01/02 14:40:32 iliaa Exp $ */ - - #ifdef HAVE_CONFIG_H - #include "config.h" -@@ -283,7 +283,7 @@ - } - /* }}} */ - --/* {{{ proto string zip_entry_read(resource zip_ent) -+/* {{{ proto string zip_entry_read(resource zip_ent [, int nbytes]) - Read X bytes from an opened zip entry */ - PHP_FUNCTION(zip_entry_read) - { -@@ -295,6 +295,10 @@ - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|l", &zzip_ent, &len) == FAILURE) { - return; -+ } -+ if (len <= 0) { -+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "The bytes parameter must greater then zero"); -+ RETURN_FALSE; - } - ZEND_FETCH_RESOURCE(entry, php_zzip_dirent *, &zzip_ent, -1, le_zip_entry_name, le_zip_entry); - Deleted: data/patches/MOPB/MOPB-41-php5.diff ==================================================================--- data/patches/MOPB/MOPB-41-php5.diff 2011-01-18 02:17:33 UTC (rev 15915) +++ data/patches/MOPB/MOPB-41-php5.diff 2011-01-18 02:17:42 UTC (rev 15916) @@ -1,39 +0,0 @@ -diff -uNrp php5-5.2.1/ext/sqlite/sess_sqlite.c php5-5.2.1-kees/ext/sqlite/sess_sqlite.c ---- php5-5.2.1/ext/sqlite/sess_sqlite.c 2007-01-01 01:36:07.000000000 -0800 -+++ php5-5.2.1-kees/ext/sqlite/sess_sqlite.c 2007-04-18 17:05:57.000000000 -0700 -@@ -31,6 +31,11 @@ - extern int sqlite_encode_binary(const unsigned char *in, int n, unsigned char *out); - extern int sqlite_decode_binary(const unsigned char *in, unsigned char *out); - -+#define php_sqlite_decode_binary(in, out) ( \ -+ (!in || !*in) ? 0 : \ -+ sqlite_decode_binary((const unsigned char *)in, (unsigned char *)out) \ -+) -+ - PS_FUNCS(sqlite); - - ps_module ps_mod_sqlite = { -@@ -111,7 +116,7 @@ PS_READ_FUNC(sqlite) - if (rowdata[0] != NULL) { - *vallen = strlen(rowdata[0]); - *val = emalloc(*vallen); -- *vallen = sqlite_decode_binary(rowdata[0], *val); -+ *vallen = php_sqlite_decode_binary(rowdata[0], *val); - (*val)[*vallen] = ''\0''; - } - break; -diff -uNrp php5-5.2.1/ext/sqlite/sqlite.c php5-5.2.1-kees/ext/sqlite/sqlite.c ---- php5-5.2.1/ext/sqlite/sqlite.c 2007-01-01 01:36:07.000000000 -0800 -+++ php5-5.2.1-kees/ext/sqlite/sqlite.c 2007-04-18 17:04:43.000000000 -0700 -@@ -73,7 +73,10 @@ extern int sqlite_encode_binary(const un - extern int sqlite_decode_binary(const unsigned char *in, unsigned char *out); - - #define php_sqlite_encode_binary(in, n, out) sqlite_encode_binary((const unsigned char *)in, n, (unsigned char *)out) --#define php_sqlite_decode_binary(in, out) sqlite_decode_binary((const unsigned char *)in, (unsigned char *)out) -+#define php_sqlite_decode_binary(in, out) ( \ -+ (!in || !*in) ? 0 : \ -+ sqlite_decode_binary((const unsigned char *)in, (unsigned char *)out) \ -+) - - static int sqlite_count_elements(zval *object, long *count TSRMLS_DC); - Deleted: data/patches/MOPB/MOPB-42-php5.diff ==================================================================--- data/patches/MOPB/MOPB-42-php5.diff 2011-01-18 02:17:33 UTC (rev 15915) +++ data/patches/MOPB/MOPB-42-php5.diff 2011-01-18 02:17:42 UTC (rev 15916) @@ -1,13 +0,0 @@ -# http://cvs.php.net/viewvc.cgi/php-src/main/streams/filter.c?r1=1.17.2.3.2.4&r2=1.17.2.3.2.5&pathrev=PHP_5_2&view=patch ---- filter.c 2006/11/21 20:58:17 1.17.2.3.2.4 -+++ filter.c 2006/12/25 13:11:23 1.17.2.3.2.5 -@@ -265,7 +265,8 @@ - /* try a wildcard */ - char *wildname; - -- wildname = estrdup(filtername); -+ wildname = emalloc(n+3); -+ memcpy(wildname, filtername, n+1); - period = wildname + (period - filtername); - while (period && !filter) { - *period = ''\0''; Deleted: data/patches/MOPB/MOPB-44-php5.diff ==================================================================--- data/patches/MOPB/MOPB-44-php5.diff 2011-01-18 02:17:33 UTC (rev 15915) +++ data/patches/MOPB/MOPB-44-php5.diff 2011-01-18 02:17:42 UTC (rev 15916) @@ -1,91 +0,0 @@ ---- old/Zend/zend_alloc.c 2006/12/20 10:49:32 1.144.2.3.2.27 -+++ new/Zend/zend_alloc.c 2006/12/25 12:16:33 1.144.2.3.2.28 -@@ -454,11 +454,11 @@ - #define ZEND_MM_ALIGNED_MIN_HEADER_SIZE (ZEND_MM_MIN_ALLOC_BLOCK_SIZE>ZEND_MM_ALIGNED_FREE_HEADER_SIZE?ZEND_MM_MIN_ALLOC_BLOCK_SIZE:ZEND_MM_ALIGNED_FREE_HEADER_SIZE) - #define ZEND_MM_ALIGNED_SEGMENT_SIZE ZEND_MM_ALIGNED_SIZE(sizeof(zend_mm_segment)) - --#define ZEND_MM_MIN_SIZE (ZEND_MM_ALIGNED_MIN_HEADER_SIZE-(ZEND_MM_ALIGNED_HEADER_SIZE+END_MAGIC_SIZE)) -+#define ZEND_MM_MIN_SIZE ((ZEND_MM_ALIGNED_MIN_HEADER_SIZE>(ZEND_MM_ALIGNED_HEADER_SIZE+END_MAGIC_SIZE))?(ZEND_MM_ALIGNED_MIN_HEADER_SIZE-(ZEND_MM_ALIGNED_HEADER_SIZE+END_MAGIC_SIZE)):0) - - #define ZEND_MM_MAX_SMALL_SIZE (((ZEND_MM_NUM_BUCKETS-1)<<ZEND_MM_ALIGNMENT_LOG2)+ZEND_MM_ALIGNED_MIN_HEADER_SIZE) - --#define ZEND_MM_TRUE_SIZE(size) (((long)size<(long)ZEND_MM_MIN_SIZE)?(ZEND_MM_ALIGNED_MIN_HEADER_SIZE):(ZEND_MM_ALIGNED_SIZE(size+ZEND_MM_ALIGNED_HEADER_SIZE+END_MAGIC_SIZE))) -+#define ZEND_MM_TRUE_SIZE(size) ((size<ZEND_MM_MIN_SIZE)?(ZEND_MM_ALIGNED_MIN_HEADER_SIZE):(ZEND_MM_ALIGNED_SIZE(size+ZEND_MM_ALIGNED_HEADER_SIZE+END_MAGIC_SIZE))) - - #define ZEND_MM_BUCKET_INDEX(true_size) ((true_size>>ZEND_MM_ALIGNMENT_LOG2)-(ZEND_MM_ALIGNED_MIN_HEADER_SIZE>>ZEND_MM_ALIGNMENT_LOG2)+1) - -@@ -1332,6 +1332,9 @@ - zend_mm_free_block *p, *end, *best_fit = NULL; - size_t true_size = ZEND_MM_TRUE_SIZE(size); - -+ if (true_size < size) { -+ goto out_of_memory; -+ } - if (ZEND_MM_SMALL_SIZE(true_size)) { - size_t index = ZEND_MM_BUCKET_INDEX(true_size); - unsigned int bitmap; -@@ -1422,7 +1425,7 @@ - size_t remaining_size; - zend_mm_segment *segment; - -- if (true_size + ZEND_MM_ALIGNED_SEGMENT_SIZE + ZEND_MM_ALIGNED_HEADER_SIZE > heap->block_size) { -+ if (true_size > heap->block_size - (ZEND_MM_ALIGNED_SEGMENT_SIZE + ZEND_MM_ALIGNED_HEADER_SIZE)) { - /* Make sure we add a memory block which is big enough, - segment must have header "size" and trailer "guard" block */ - segment_size = true_size + ZEND_MM_ALIGNED_SEGMENT_SIZE + ZEND_MM_ALIGNED_HEADER_SIZE; -@@ -1433,7 +1436,8 @@ - - HANDLE_BLOCK_INTERRUPTIONS(); - -- if (heap->real_size + segment_size > heap->limit) { -+ if (segment_size < true_size || -+ heap->real_size + segment_size > heap->limit) { - /* Memory limit overflow */ - #if ZEND_MM_CACHE - zend_mm_free_cache(heap); -@@ -1454,6 +1458,7 @@ - zend_mm_free_cache(heap); - #endif - HANDLE_UNBLOCK_INTERRUPTIONS(); -+out_of_memory: - #if ZEND_DEBUG - zend_mm_safe_error(heap, "Out of memory (allocated %d) at %s:%d (tried to allocate %d bytes)", heap->real_size, __zend_filename, __zend_lineno, size); - #else -@@ -1617,6 +1622,10 @@ - orig_size = ZEND_MM_BLOCK_SIZE(mm_block); - ZEND_MM_CHECK_PROTECTION(mm_block); - -+ if (true_size < size) { -+ goto out_of_memory; -+ } -+ - if (true_size <= orig_size) { - size_t remaining_size = orig_size - true_size; - -@@ -1694,7 +1703,7 @@ - HANDLE_BLOCK_INTERRUPTIONS(); - realloc_segment: - /* segment size, size of block and size of guard block */ -- if (true_size+ZEND_MM_ALIGNED_SEGMENT_SIZE+ZEND_MM_ALIGNED_HEADER_SIZE > heap->block_size) { -+ if (true_size > heap->block_size - (ZEND_MM_ALIGNED_SEGMENT_SIZE + ZEND_MM_ALIGNED_HEADER_SIZE)) { - segment_size = true_size+ZEND_MM_ALIGNED_SEGMENT_SIZE+ZEND_MM_ALIGNED_HEADER_SIZE; - segment_size = ((segment_size + (heap->block_size-1)) / heap->block_size) * heap->block_size; - } else { -@@ -1702,7 +1711,8 @@ - } - - segment_copy = (zend_mm_segment *) ((char *)mm_block - ZEND_MM_ALIGNED_SEGMENT_SIZE); -- if (heap->real_size + segment_size - segment_copy->size > heap->limit) { -+ if (segment_size < true_size || -+ heap->real_size + segment_size - segment_copy->size > heap->limit) { - #if ZEND_MM_CACHE - zend_mm_free_cache(heap); - #endif -@@ -1721,6 +1731,7 @@ - zend_mm_free_cache(heap); - #endif - HANDLE_UNBLOCK_INTERRUPTIONS(); -+out_of_memory: - #if ZEND_DEBUG - zend_mm_safe_error(heap, "Out of memory (allocated %d) at %s:%d (tried to allocate %d bytes)", heap->real_size, __zend_filename, __zend_lineno, size); - #else Deleted: data/patches/MOPB/MOPB-45-php5.diff ==================================================================--- data/patches/MOPB/MOPB-45-php5.diff 2011-01-18 02:17:33 UTC (rev 15915) +++ data/patches/MOPB/MOPB-45-php5.diff 2011-01-18 02:17:42 UTC (rev 15916) @@ -1,13 +0,0 @@ -Index: php5-5.2.0/ext/filter/logical_filters.c -==================================================================---- php5-5.2.0.orig/ext/filter/logical_filters.c 2006-10-17 17:26:14.000000000 +0200 -+++ php5-5.2.0/ext/filter/logical_filters.c 2007-04-23 23:10:52.000000000 +0200 -@@ -500,7 +500,7 @@ - void php_filter_validate_email(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */ - { - /* From http://cvs.php.net/co.php/pear/HTML_QuickForm/QuickForm/Rule/Email.php?r=1.4 */ -- const char regexp[] = "/^((\\\"[^\\\"\\f\\n\\r\\t\\v\\b]+\\\")|([\\w\\!\\#\\$\\%\\&\\''\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]+(\\.[\\w\\!\\#\\$\\%\\&\\''\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]+)*))@((\\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9\\-])+\\.)+[A-Za-z\\-]+))$/"; -+ const char regexp[] = "/^((\\\"[^\\\"\\f\\n\\r\\t\\v\\b]+\\\")|([\\w\\!\\#\\$\\%\\&\\''\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]+(\\.[\\w\\!\\#\\$\\%\\&\\''\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]+)*))@((\\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9\\-])+\\.)+[A-Za-z\\-]+))$/D"; - - pcre *re = NULL; - pcre_extra *pcre_extra = NULL; Deleted: data/patches/MOPB/php4-etch/069-CVE-2007-0910-updated-for-MOPB-32.patch ==================================================================--- data/patches/MOPB/php4-etch/069-CVE-2007-0910-updated-for-MOPB-32.patch 2011-01-18 02:17:33 UTC (rev 15915) +++ data/patches/MOPB/php4-etch/069-CVE-2007-0910-updated-for-MOPB-32.patch 2011-01-18 02:17:42 UTC (rev 15916) @@ -1,140 +0,0 @@ - -Fix possible super-global clobbers; CVE-2007-0910 - -Fix possible overflows and stack corruptions covered by CVE-2007-0906. - ---- php-4.3.9/ext/session/session.c.cve0910 -+++ php-4.3.9/ext/session/session.c -@@ -267,8 +267,12 @@ - { - zval **sym_track = NULL; - -- zend_hash_find(Z_ARRVAL_P(PS(http_session_vars)), name, namelen + 1, -- (void *) &sym_track); -+ IF_SESSION_VARS() { -+ zend_hash_find(Z_ARRVAL_P(PS(http_session_vars)), name, namelen + 1, -+ (void *) &sym_track); -+ } else { -+ return; -+ } - - /* - * Set up a proper reference between $_SESSION["x"] and $x. -@@ -277,9 +271,12 @@ - if (PG(register_globals)) { - zval **sym_global = NULL; - -- zend_hash_find(&EG(symbol_table), name, namelen + 1, -- (void *) &sym_global); -- -+ if (zend_hash_find(&EG(symbol_table), name, namelen + 1, (void *) &sym_global) == SUCCESS) { -+ if ((Z_TYPE_PP(sym_global) == IS_ARRAY && Z_ARRVAL_PP(sym_global) == &EG(symbol_table)) || *sym_global == PS(http_session_vars)) { -+ return; -+ } -+ } -+ - if (sym_global == NULL && sym_track == NULL) { - zval *empty_var; - -@@ -309,7 +298,10 @@ - if (PG(register_globals)) { - zval **old_symbol; - if (zend_hash_find(&EG(symbol_table),name,namelen+1,(void *)&old_symbol) == SUCCESS) { -- -+ if ((Z_TYPE_PP(old_symbol) == IS_ARRAY && Z_ARRVAL_PP(old_symbol) == &EG(symbol_table)) || *old_symbol == PS(http_session_vars)) { -+ return; -+ } -+ - /* - * A global symbol with the same name exists already. That - * symbol might have been created by other means (e.g. $_GET). -@@ -418,13 +410,26 @@ - PHP_VAR_UNSERIALIZE_INIT(var_hash); - - for (p = val; p < endptr; ) { -+ zval **tmp; - namelen = *p & (~PS_BIN_UNDEF); -+ -+ if (namelen > PS_BIN_MAX || (p + namelen) >= endptr) { -+ return FAILURE; -+ } -+ - has_value = *p & PS_BIN_UNDEF ? 0 : 1; - - name = estrndup(p + 1, namelen); - - p += namelen + 1; -- -+ -+ if (zend_hash_find(&EG(symbol_table), name, namelen + 1, (void **) &tmp) == SUCCESS) { -+ if ((Z_TYPE_PP(tmp) == IS_ARRAY && Z_ARRVAL_PP(tmp) == &EG(symbol_table)) || *tmp == PS(http_session_vars)) { -+ efree(name); -+ continue; -+ } -+ } -+ - if (has_value) { - ALLOC_INIT_ZVAL(current); - if (php_var_unserialize(¤t, (const unsigned char **)&p, endptr, &var_hash TSRMLS_CC)) { -@@ -490,6 +495,7 @@ - p = val; - - while (p < endptr) { -+ zval **tmp; - q = p; - while (*q != PS_DELIMITER) - if (++q >= endptr) goto break_outer_loop; -@@ -504,7 +510,14 @@ - namelen = q - p; - name = estrndup(p, namelen); - q++; -- -+ -+ if (zend_hash_find(&EG(symbol_table), name, namelen + 1, (void **) &tmp) == SUCCESS) { -+ if ((Z_TYPE_PP(tmp) == IS_ARRAY && Z_ARRVAL_PP(tmp) == &EG(symbol_table)) || *tmp == PS(http_session_vars)) { -+ -+ goto skip; -+ } -+ } -+ - if (has_value) { - ALLOC_INIT_ZVAL(current); - if (php_var_unserialize(¤t, (const unsigned char **)&q, endptr, &var_hash TSRMLS_CC)) { -@@ -513,6 +526,7 @@ - zval_ptr_dtor(¤t); - } - PS_ADD_VARL(name, namelen); -+skip: - efree(name); - - p = q; -@@ -532,12 +547,16 @@ - zend_hash_del(&EG(symbol_table), "HTTP_SESSION_VARS", sizeof("HTTP_SESSION_VARS")); - zend_hash_del(&EG(symbol_table), "_SESSION", sizeof("_SESSION")); - -+ if (PS(http_session_vars)) { -+ zval_ptr_dtor(&PS(http_session_vars)); -+ } -+ - MAKE_STD_ZVAL(session_vars); - array_init(session_vars); - PS(http_session_vars) = session_vars; - -- ZEND_SET_GLOBAL_VAR_WITH_LENGTH("HTTP_SESSION_VARS", sizeof("HTTP_SESSION_VARS"), PS(http_session_vars), 2, 1); -- ZEND_SET_GLOBAL_VAR_WITH_LENGTH("_SESSION", sizeof("_SESSION"), PS(http_session_vars), 2, 1); -+ ZEND_SET_GLOBAL_VAR_WITH_LENGTH("HTTP_SESSION_VARS", sizeof("HTTP_SESSION_VARS"), PS(http_session_vars), 3, 1); -+ ZEND_SET_GLOBAL_VAR_WITH_LENGTH("_SESSION", sizeof("_SESSION"), PS(http_session_vars), 3, 1); - } - - static char *php_session_encode(int *newlen TSRMLS_DC) -@@ -1637,6 +1605,10 @@ - - static void php_rshutdown_session_globals(TSRMLS_D) - { -+ if (PS(http_session_vars)) { -+ zval_ptr_dtor(&PS(http_session_vars)); -+ PS(http_session_vars) = NULL; -+ } - if (PS(mod_data)) { - zend_try { - PS(mod)->s_close(&PS(mod_data) TSRMLS_CC); Deleted: data/patches/MOPB/php4-etch/071-CVE-2007-1380-MOPB-10.patch ==================================================================--- data/patches/MOPB/php4-etch/071-CVE-2007-1380-MOPB-10.patch 2011-01-18 02:17:33 UTC (rev 15915) +++ data/patches/MOPB/php4-etch/071-CVE-2007-1380-MOPB-10.patch 2011-01-18 02:17:42 UTC (rev 15916) @@ -1,11 +0,0 @@ ---- php4-4.4.4/ext/session/session.c 2006/12/26 16:53:47 1.417.2.8.2.22 -+++ php4-4.4.4/ext/session/session.c 2006/12/31 22:25:55 1.417.2.8.2.23 -@@ -471,7 +471,7 @@ - zval **tmp; - namelen = *p & (~PS_BIN_UNDEF); - -- if (namelen > PS_BIN_MAX || (p + namelen) >= endptr) { -+ if (namelen < 0 || namelen > PS_BIN_MAX || (p + namelen) >= endptr) { - return FAILURE; - } - Deleted: data/patches/MOPB/php4-etch/072-CVE-2007-1718-MOPB-34.patch ==================================================================--- data/patches/MOPB/php4-etch/072-CVE-2007-1718-MOPB-34.patch 2011-01-18 02:17:33 UTC (rev 15915) +++ data/patches/MOPB/php4-etch/072-CVE-2007-1718-MOPB-34.patch 2011-01-18 02:17:42 UTC (rev 15916) @@ -1,26 +0,0 @@ ---- php4-4.4.4.orig/ext/mbstring/mbstring.c 2006-04-03 15:04:13.000000000 +0200 -+++ php4-4.4.4/ext/mbstring/mbstring.c 2007-04-19 22:16:46.000000000 +0200 -@@ -3499,8 +3499,8 @@ - #if HAVE_SENDMAIL - #define SKIP_LONG_HEADER_SEP_MBSTRING(str, pos) \ - if (str[pos] == ''\r'' && str[pos + 1] == ''\n'' && (str[pos + 2] == '' '' || str[pos + 2] == ''\t'')) { \ -- pos += 3; \ -- while (str[pos] == '' '' || str[pos] == ''\t'') { \ -+ pos += 2; \ -+ while (str[pos + 1] == '' '' || str[pos + 1] == ''\t'') { \ - pos++; \ - } \ - continue; \ ---- php4-4.4.4.orig/ext/standard/mail.c 2006-01-01 14:46:57.000000000 +0100 -+++ php4-4.4.4/ext/standard/mail.c 2007-04-19 22:15:48.000000000 +0200 -@@ -48,8 +48,8 @@ - - #define SKIP_LONG_HEADER_SEP(str, pos) \ - if (str[pos] == ''\r'' && str[pos + 1] == ''\n'' && (str[pos + 2] == '' '' || str[pos + 2] == ''\t'')) { \ -- pos += 3; \ -- while (str[pos] == '' '' || str[pos] == ''\t'') { \ -+ pos += 2; \ -+ while (str[pos + 1] == '' '' || str[pos + 1] == ''\t'') { \ - pos++; \ - } \ - continue; \ Deleted: data/patches/MOPB/php4-etch/073-CVE-2007-1521-MOPB-22.patch ==================================================================--- data/patches/MOPB/php4-etch/073-CVE-2007-1521-MOPB-22.patch 2011-01-18 02:17:33 UTC (rev 15915) +++ data/patches/MOPB/php4-etch/073-CVE-2007-1521-MOPB-22.patch 2011-01-18 02:17:42 UTC (rev 15916) @@ -1,23 +0,0 @@ -diff -aur php-4.4.6/ext/session/session.c php-4.4.7RC1/ext/session/session.c ---- php/ext/session/session.c 2007-02-15 10:41:30.000000000 +0100 -+++ php4-4.4.4/ext/session/session.c 2007-04-04 21:52:26.000000000 +0200 -@@ -1396,7 +1395,10 @@ - RETURN_FALSE; - } - if (PS(session_status) == php_session_active) { -- if (PS(id)) efree(PS(id)); -+ if (PS(id)) { -+ efree(PS(id)); -+ PS(id) = NULL; -+ } - - PS(id) = PS(mod)->s_create_sid(&PS(mod_data), NULL TSRMLS_CC); - -@@ -1688,6 +1690,7 @@ - } - if (PS(id)) { - efree(PS(id)); -+ PS(id) = NULL; - } - PS(session_status)=php_session_none; - } Deleted: data/patches/MOPB/php4-etch/074-CVE-2007-1286-MOPB-04.patch ==================================================================--- data/patches/MOPB/php4-etch/074-CVE-2007-1286-MOPB-04.patch 2011-01-18 02:17:33 UTC (rev 15915) +++ data/patches/MOPB/php4-etch/074-CVE-2007-1286-MOPB-04.patch 2011-01-18 02:17:42 UTC (rev 15916) @@ -1,24 +0,0 @@ ---- php4/ext/standard/var_unserializer.c 2006/08/09 23:29:17 1.18.4.24.2.7 -+++ php4-4.4.4/ext/standard/var_unserializer.c 2006/10/27 08:35:25 1.18.4.24.2.8 -@@ -958,6 +958,10 @@ - - if (*rval == *rval_ref) return 0; - -+ if ((*rval_ref)->refcount > 65500) { -+ return 0; -+ } -+ - if (*rval != NULL) { - zval_ptr_dtor(rval); - } -@@ -999,6 +1003,10 @@ - - id = parse_iv(start + 2) - 1; - if (id == -1 || var_access(var_hash, id, &rval_ref) != SUCCESS) { -+ return 0; -+ } -+ -+ if ((*rval_ref)->refcount > 65500) { - return 0; - } - Deleted: data/patches/MOPB/php4-sarge/CVE-2007-0910-updated-for-MOPB-32.patch ==================================================================--- data/patches/MOPB/php4-sarge/CVE-2007-0910-updated-for-MOPB-32.patch 2011-01-18 02:17:33 UTC (rev 15915) +++ data/patches/MOPB/php4-sarge/CVE-2007-0910-updated-for-MOPB-32.patch 2011-01-18 02:17:42 UTC (rev 15916) @@ -1,151 +0,0 @@ - -Fix possible super-global clobbers; CVE-2007-0910 - -Fix possible overflows and stack corruptions covered by CVE-2007-0906. - -Fix double free introduced by former security fix, MOPB-32. - ---- php-4.3.9/ext/session/session.c.cve0910 -+++ php-4.3.9/ext/session/session.c -@@ -252,8 +249,12 @@ - { - zval **sym_track = NULL; - -- zend_hash_find(Z_ARRVAL_P(PS(http_session_vars)), name, namelen + 1, -- (void *) &sym_track); -+ IF_SESSION_VARS() { -+ zend_hash_find(Z_ARRVAL_P(PS(http_session_vars)), name, namelen + 1, -+ (void *) &sym_track); -+ } else { -+ return; -+ } - - /* - * Set up a proper reference between $_SESSION["x"] and $x. -@@ -262,9 +263,12 @@ - if (PG(register_globals)) { - zval **sym_global = NULL; - -- zend_hash_find(&EG(symbol_table), name, namelen + 1, -- (void *) &sym_global); -- -+ if (zend_hash_find(&EG(symbol_table), name, namelen + 1, (void *) &sym_global) == SUCCESS) { -+ if ((Z_TYPE_PP(sym_global) == IS_ARRAY && Z_ARRVAL_PP(sym_global) == &EG(symbol_table)) || *sym_global == PS(http_session_vars)) { -+ return; -+ } -+ } -+ - if (sym_global == NULL && sym_track == NULL) { - zval *empty_var; - -@@ -294,7 +298,10 @@ - if (PG(register_globals)) { - zval **old_symbol; - if (zend_hash_find(&EG(symbol_table),name,namelen+1,(void *)&old_symbol) == SUCCESS) { -- -+ if ((Z_TYPE_PP(old_symbol) == IS_ARRAY && Z_ARRVAL_PP(old_symbol) == &EG(symbol_table)) || *old_symbol == PS(http_session_vars)) { -+ return; -+ } -+ - /* - * A global symbol with the same name exists already. That - * symbol might have been created by other means (e.g. $_GET). -@@ -403,13 +410,26 @@ - PHP_VAR_UNSERIALIZE_INIT(var_hash); - - for (p = val; p < endptr; ) { -+ zval **tmp; - namelen = *p & (~PS_BIN_UNDEF); -+ -+ if (namelen > PS_BIN_MAX || (p + namelen) >= endptr) { -+ return FAILURE; -+ } -+ - has_value = *p & PS_BIN_UNDEF ? 0 : 1; - - name = estrndup(p + 1, namelen); - - p += namelen + 1; -- -+ -+ if (zend_hash_find(&EG(symbol_table), name, namelen + 1, (void **) &tmp) == SUCCESS) { -+ if ((Z_TYPE_PP(tmp) == IS_ARRAY && Z_ARRVAL_PP(tmp) == &EG(symbol_table)) || *tmp == PS(http_session_vars)) { -+ efree(name); -+ continue; -+ } -+ } -+ - if (has_value) { - ALLOC_INIT_ZVAL(current); - if (php_var_unserialize(¤t, (const unsigned char **)&p, endptr, &var_hash TSRMLS_CC)) { -@@ -475,6 +495,7 @@ - p = val; - - while (p < endptr) { -+ zval **tmp; - q = p; - while (*q != PS_DELIMITER) - if (++q >= endptr) goto break_outer_loop; -@@ -489,7 +510,14 @@ - namelen = q - p; - name = estrndup(p, namelen); - q++; -- -+ -+ if (zend_hash_find(&EG(symbol_table), name, namelen + 1, (void **) &tmp) == SUCCESS) { -+ if ((Z_TYPE_PP(tmp) == IS_ARRAY && Z_ARRVAL_PP(tmp) == &EG(symbol_table)) || *tmp == PS(http_session_vars)) { -+ -+ goto skip; -+ } -+ } -+ - if (has_value) { - ALLOC_INIT_ZVAL(current); - if (php_var_unserialize(¤t, (const unsigned char **)&q, endptr, &var_hash TSRMLS_CC)) { -@@ -498,6 +526,7 @@ - zval_ptr_dtor(¤t); - } - PS_ADD_VARL(name, namelen); -+skip: - efree(name); - - p = q; -@@ -517,12 +547,16 @@ - zend_hash_del(&EG(symbol_table), "HTTP_SESSION_VARS", sizeof("HTTP_SESSION_VARS")); - zend_hash_del(&EG(symbol_table), "_SESSION", sizeof("_SESSION")); - -+ if (PS(http_session_vars)) { -+ zval_ptr_dtor(&PS(http_session_vars)); -+ } -+ - MAKE_STD_ZVAL(session_vars); - array_init(session_vars); - PS(http_session_vars) = session_vars; - -- ZEND_SET_GLOBAL_VAR_WITH_LENGTH("HTTP_SESSION_VARS", sizeof("HTTP_SESSION_VARS"), PS(http_session_vars), 2, 1); -- ZEND_SET_GLOBAL_VAR_WITH_LENGTH("_SESSION", sizeof("_SESSION"), PS(http_session_vars), 2, 1); -+ ZEND_SET_GLOBAL_VAR_WITH_LENGTH("HTTP_SESSION_VARS", sizeof("HTTP_SESSION_VARS"), PS(http_session_vars), 3, 1); -+ ZEND_SET_GLOBAL_VAR_WITH_LENGTH("_SESSION", sizeof("_SESSION"), PS(http_session_vars), 3, 1); - } - - static char *php_session_encode(int *newlen TSRMLS_DC) -@@ -1612,6 +1605,10 @@ - - static void php_rshutdown_session_globals(TSRMLS_D) - { -+ if (PS(http_session_vars)) { -+ zval_ptr_dtor(&PS(http_session_vars)); -+ PS(http_session_vars) = NULL; -+ } - if (PS(mod_data)) { - PS(mod)->s_close(&PS(mod_data) TSRMLS_CC); - } - - - - - - - - - Deleted: data/patches/MOPB/php4-sarge/CVE-2007-1286-MOPB-04.patch ==================================================================--- data/patches/MOPB/php4-sarge/CVE-2007-1286-MOPB-04.patch 2011-01-18 02:17:33 UTC (rev 15915) +++ data/patches/MOPB/php4-sarge/CVE-2007-1286-MOPB-04.patch 2011-01-18 02:17:42 UTC (rev 15916) @@ -1,24 +0,0 @@ ---- php4/ext/standard/var_unserializer.c 2006/08/09 23:29:17 1.18.4.24.2.7 -+++ php4-4.3.10/ext/standard/var_unserializer.c 2006/10/27 08:35:25 1.18.4.24.2.8 -@@ -958,6 +958,10 @@ - - if (*rval == *rval_ref) return 0; - -+ if ((*rval_ref)->refcount > 65500) { -+ return 0; -+ } -+ - if (*rval != NULL) { - zval_ptr_dtor(rval); - } -@@ -999,6 +1003,10 @@ - - id = parse_iv(start + 2) - 1; - if (id == -1 || var_access(var_hash, id, &rval_ref) != SUCCESS) { -+ return 0; -+ } -+ -+ if ((*rval_ref)->refcount > 65500) { - return 0; - } - Deleted: data/patches/MOPB/php4-sarge/CVE-2007-1380-MOPB-10.patch ==================================================================--- data/patches/MOPB/php4-sarge/CVE-2007-1380-MOPB-10.patch 2011-01-18 02:17:33 UTC (rev 15915) +++ data/patches/MOPB/php4-sarge/CVE-2007-1380-MOPB-10.patch 2011-01-18 02:17:42 UTC (rev 15916) @@ -1,14 +0,0 @@ ---- php4-4.3.10/ext/session/session.c 2006/12/26 16:53:47 1.417.2.8.2.22 -+++ php4-4.3.10/ext/session/session.c 2006/12/31 22:25:55 1.417.2.8.2.23 -@@ -471,6 +471,11 @@ - for (p = val; p < endptr; ) { - zval **tmp; - namelen = *p & (~PS_BIN_UNDEF); -+ -+ if (namelen < 0 || namelen > PS_BIN_MAX || (p + namelen) >= endptr) { -+ return FAILURE; -+ } -+ - has_value = *p & PS_BIN_UNDEF ? 0 : 1; - - name = estrndup(p + 1, namelen); Deleted: data/patches/MOPB/php4-sarge/CVE-2007-1521-MOPB-22.patch ==================================================================--- data/patches/MOPB/php4-sarge/CVE-2007-1521-MOPB-22.patch 2011-01-18 02:17:33 UTC (rev 15915) +++ data/patches/MOPB/php4-sarge/CVE-2007-1521-MOPB-22.patch 2011-01-18 02:17:42 UTC (rev 15916) @@ -1,23 +0,0 @@ -diff -aur php-4.4.6/ext/session/session.c php-4.4.7RC1/ext/session/session.c ---- php/ext/session/session.c 2007-02-15 10:41:30.000000000 +0100 -+++ php4-4.3.10/ext/session/session.c 2007-04-04 21:52:26.000000000 +0200 -@@ -1396,7 +1395,10 @@ - RETURN_FALSE; - } - if (PS(session_status) == php_session_active) { -- if (PS(id)) efree(PS(id)); -+ if (PS(id)) { -+ efree(PS(id)); -+ PS(id) = NULL; -+ } - - PS(id) = PS(mod)->s_create_sid(&PS(mod_data), NULL TSRMLS_CC); - -@@ -1688,6 +1690,7 @@ - } - if (PS(id)) { - efree(PS(id)); -+ PS(id) = NULL; - } - PS(session_status)=php_session_none; - }