From: Dmitry Stogov Date: Sun, 18 May 2014 17:17:31 +0000 (+0400) Subject: Merge branch 'master' into phpng X-Git-Tag: POST_PHPNG_MERGE~328^2~2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b11a30f5eaeae2aa797ebef8722f4b1d51c72198;p=php Merge branch 'master' into phpng * master: Support for __debugInfo (Joe Watkins) Optimize ZEND_POW (Rouven Weßling) gcov: tentative fix for broken coverage data after fix for opcache coverage slightly hackish, but works. The idea is that we want to give priority to .gcda files in .libs dirs vs the files in the upper level dir gcov: tentative fix for broken coverage data after fix for opcache coverage slightly hackish, but works. The idea is that we want to give priority to .gcda files in .libs dirs vs the files in the upper level dir Prevent recursion in ZF2 Parameters class adding NEWS block for beta4 5.4.30 next enable email notifications update NEWS update NEWS update NEWS - Updated to version 2014.3 (2014c) fix bug #67253: timelib_meridian_with_check out-of-bounds read Fix bug #67252: convert_uudecode out-of-bounds read Fix bug #67251 - date_parse_from_format out-of-bounds read Fix bug #67250 (iptcparse out-of-bounds read) Conflicts: ext/opcache/zend_persist.c ext/spl/spl_array.c --- b11a30f5eaeae2aa797ebef8722f4b1d51c72198 diff --cc .travis.yml index f661807515,5b49434cc8..6973f480d1 --- a/.travis.yml +++ b/.travis.yml @@@ -4,12 -4,9 +4,13 @@@ php # We only specify one version so we only get one worker - 5.4 +branches: + except: + - phpng + notifications: - email: false + email: + on_failure: change env: global: diff --cc ext/spl/spl_array.c index f83004428e,1fe795ce2e..5c873f36a4 --- a/ext/spl/spl_array.c +++ b/ext/spl/spl_array.c @@@ -622,29 -591,27 +622,29 @@@ static void spl_array_unset_dimension(z static int spl_array_has_dimension_ex(int check_inherited, zval *object, zval *offset, int check_empty TSRMLS_DC) /* {{{ */ { - spl_array_object *intern = (spl_array_object*)zend_object_store_get_object(object TSRMLS_CC); + spl_array_object *intern = Z_SPLARRAY_P(object); long index; - zval *rv, *value = NULL, **tmp; + zval rv, *value = NULL, *tmp; if (check_inherited && intern->fptr_offset_has) { - zval *offset_tmp = offset; - SEPARATE_ARG_IF_REF(offset_tmp); - zend_call_method_with_1_params(&object, Z_OBJCE_P(object), &intern->fptr_offset_has, "offsetExists", &rv, offset_tmp); - zval_ptr_dtor(&offset_tmp); +//??? zval offset_tmp; +//??? ZVAL_COPY_VALUE(&offset_tmp, offset); +//??? SEPARATE_ARG_IF_REF(&offset_tmp); +//??? zend_call_method_with_1_params(object, Z_OBJCE_P(object), &intern->fptr_offset_has, "offsetExists", &rv, &offset_tmp); +//??? zval_ptr_dtor(&offset_tmp); + SEPARATE_ARG_IF_REF(offset); + zend_call_method_with_1_params(object, Z_OBJCE_P(object), &intern->fptr_offset_has, "offsetExists", &rv, offset); + zval_ptr_dtor(offset); - if (rv && zend_is_true(rv TSRMLS_CC)) { + if (!Z_ISUNDEF(rv) && zend_is_true(&rv TSRMLS_CC)) { zval_ptr_dtor(&rv); - if (check_empty == 2) { + if (check_empty != 1) { return 1; } else if (intern->fptr_offset_get) { - value = spl_array_read_dimension_ex(1, object, offset, BP_VAR_R TSRMLS_CC); + value = spl_array_read_dimension_ex(1, object, offset, BP_VAR_R, &rv TSRMLS_CC); } } else { - if (rv) { - zval_ptr_dtor(&rv); - } + zval_ptr_dtor(&rv); return 0; } } @@@ -662,22 -629,17 +662,23 @@@ return 0; } break; + case IS_DOUBLE: + index = (long)Z_DVAL_P(offset); + goto num_index; case IS_RESOURCE: - case IS_BOOL: + index = Z_RES_HANDLE_P(offset); + goto num_index; + case IS_FALSE: + index = 0; + goto num_index; + case IS_TRUE: + index = 1; + goto num_index; case IS_LONG: - if (offset->type == IS_DOUBLE) { - index = (long)Z_DVAL_P(offset); - } else { - index = Z_LVAL_P(offset); - } - if (zend_hash_index_find(ht, index, (void **)&tmp) != FAILURE) { + index = Z_LVAL_P(offset); +num_index: + if ((tmp = zend_hash_index_find(ht, index)) != NULL) { if (check_empty == 2) { return 1; } @@@ -690,10 -653,10 +692,10 @@@ return 0; } - if (check_inherited && intern->fptr_offset_get) { + if (check_empty && check_inherited && intern->fptr_offset_get) { - value = spl_array_read_dimension_ex(1, object, offset, BP_VAR_R TSRMLS_CC); + value = spl_array_read_dimension_ex(1, object, offset, BP_VAR_R, &rv TSRMLS_CC); } else { - value = *tmp; + value = tmp; } }