[PHP-CVS] com php-src: Fix undeclared intl_locale_get_default(): ext/intl/calendar/calendar_methods.cpp ext/intl/calendar/gregoriancalendar_methods.cpp ext/intl/locale/locale.h ext/intl/locale/locale_
Commit:9c5074a484b7f10e65471a21a7ef50dda8391509 Author:Gustavo André dos Santos Lopes cataphr...@php.net Mon, 25 Jun 2012 10:59:58 +0200 Parents: ee8b9d5c6f7390a56b277b170e2e3baee5c74bf4 Branches: master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=9c5074a484b7f10e65471a21a7ef50dda8391509 Log: Fix undeclared intl_locale_get_default() This was causing segfaults at least in the resourcebundle constructor. Also moved intl_locale_get_default() to a more central location and fixed a constness warning in resourcebundle_ctor(). Changed paths: M ext/intl/calendar/calendar_methods.cpp M ext/intl/calendar/gregoriancalendar_methods.cpp M ext/intl/locale/locale.h M ext/intl/locale/locale_methods.c M ext/intl/php_intl.c M ext/intl/php_intl.h M ext/intl/resourcebundle/resourcebundle_class.c M ext/intl/timezone/timezone_methods.cpp Diff: diff --git a/ext/intl/calendar/calendar_methods.cpp b/ext/intl/calendar/calendar_methods.cpp index 8562a2d..539b11a 100644 --- a/ext/intl/calendar/calendar_methods.cpp +++ b/ext/intl/calendar/calendar_methods.cpp @@ -25,12 +25,12 @@ #include unicode/ustring.h #include ../intl_convertcpp.h extern C { +#include ../php_intl.h #define USE_TIMEZONE_POINTER 1 #include ../timezone/timezone_class.h #define USE_CALENDAR_POINTER 1 #include calendar_class.h #include ../intl_convert.h -#include ../locale/locale.h #include zend_exceptions.h #include zend_interfaces.h #include ext/date/php_date.h diff --git a/ext/intl/calendar/gregoriancalendar_methods.cpp b/ext/intl/calendar/gregoriancalendar_methods.cpp index 47e8463..3c05253 100644 --- a/ext/intl/calendar/gregoriancalendar_methods.cpp +++ b/ext/intl/calendar/gregoriancalendar_methods.cpp @@ -24,11 +24,11 @@ #include unicode/calendar.h #include unicode/gregocal.h extern C { +#include ../php_intl.h #define USE_TIMEZONE_POINTER 1 #include ../timezone/timezone_class.h #define USE_CALENDAR_POINTER 1 #include calendar_class.h -#include ../locale/locale.h #include ext/date/php_date.h } diff --git a/ext/intl/locale/locale.h b/ext/intl/locale/locale.h index 0aaab4b..f3859c7 100755 --- a/ext/intl/locale/locale.h +++ b/ext/intl/locale/locale.h @@ -22,8 +22,6 @@ #include php.h void locale_register_constants( INIT_FUNC_ARGS ); - -const char *intl_locale_get_default( TSRMLS_D ); #define OPTION_DEFAULT NULL #define LOC_LANG_TAG language diff --git a/ext/intl/locale/locale_methods.c b/ext/intl/locale/locale_methods.c index 466dba1..936e314 100755 --- a/ext/intl/locale/locale_methods.c +++ b/ext/intl/locale/locale_methods.c @@ -201,14 +201,6 @@ static int getSingletonPos(char* str) } /* }}} */ -const char *intl_locale_get_default( TSRMLS_D ) -{ - if( INTL_G(default_locale) == NULL ) { - return uloc_getDefault(); - } - return INTL_G(default_locale); -} - /* {{{ proto static string Locale::getDefault( ) Get default locale */ /* }}} */ diff --git a/ext/intl/php_intl.c b/ext/intl/php_intl.c index 59272db..e0d1081 100755 --- a/ext/intl/php_intl.c +++ b/ext/intl/php_intl.c @@ -109,6 +109,14 @@ ZEND_DECLARE_MODULE_GLOBALS( intl ) +const char *intl_locale_get_default( TSRMLS_D ) +{ + if( INTL_G(default_locale) == NULL ) { + return uloc_getDefault(); + } + return INTL_G(default_locale); +} + /* {{{ Arguments info */ ZEND_BEGIN_ARG_INFO_EX(collator_static_0_args, 0, 0, 0) ZEND_END_ARG_INFO() diff --git a/ext/intl/php_intl.h b/ext/intl/php_intl.h index c3d5c60..7a71123 100755 --- a/ext/intl/php_intl.h +++ b/ext/intl/php_intl.h @@ -69,6 +69,8 @@ PHP_RINIT_FUNCTION(intl); PHP_RSHUTDOWN_FUNCTION(intl); PHP_MINFO_FUNCTION(intl); +const char *intl_locale_get_default( TSRMLS_D ); + #define PHP_INTL_VERSION 1.1.0 #endif /* PHP_INTL_H */ diff --git a/ext/intl/resourcebundle/resourcebundle_class.c b/ext/intl/resourcebundle/resourcebundle_class.c index 3d7fd5f..7f1529e 100644 --- a/ext/intl/resourcebundle/resourcebundle_class.c +++ b/ext/intl/resourcebundle/resourcebundle_class.c @@ -78,13 +78,11 @@ static zend_object_value ResourceBundle_object_create( zend_class_entry *ce TSRM /* {{{ ResourceBundle_ctor */ static void resourcebundle_ctor(INTERNAL_FUNCTION_PARAMETERS) { - char *bundlename; - int bundlename_len = 0; - char *locale; - int locale_len = 0; - zend_bool fallback = 1; - - char *pbuf; + const char *bundlename; + int bundlename_len = 0; + const char *locale; + int locale_len = 0; + zend_bool fallback = 1; zval *object = return_value; ResourceBundle_object *rb = (ResourceBundle_object *) zend_object_store_get_object( object TSRMLS_CC); @@ -116,6 +114,7 @@ static void resourcebundle_ctor(INTERNAL_FUNCTION_PARAMETERS) if (!fallback (INTL_DATA_ERROR_CODE(rb) == U_USING_FALLBACK_WARNING ||
[PHP-CVS] com php-src: Update UPGRADING given 7596445: UPGRADING
Commit:794d2268f20f8516f07e3189ec6c6b47b556a62d Author:Gustavo André dos Santos Lopes cataphr...@php.net Mon, 25 Jun 2012 12:12:22 +0200 Parents: 75964450ed12778ca06e2789124d87fc8b6f3945 Branches: master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=794d2268f20f8516f07e3189ec6c6b47b556a62d Log: Update UPGRADING given 7596445 Changed paths: M UPGRADING Diff: diff --git a/UPGRADING b/UPGRADING index 3581b65..77fe972 100755 --- a/UPGRADING +++ b/UPGRADING @@ -188,6 +188,9 @@ PHP X.Y UPGRADE NOTES - IntlCalendar - IntlGregorianCalendar - IntlTimeZone + - IntlBreakIterator + - IntlRuleBasedBreakIterator + - IntlCodePointBreakIterator 7. Removed Extensions -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] com php-src: Merge branch 'break_iterator': ext/intl/php_intl.c
Commit:75964450ed12778ca06e2789124d87fc8b6f3945 Author:Gustavo André dos Santos Lopes cataphr...@php.net Mon, 25 Jun 2012 12:11:49 +0200 Parents: 715e59ad82862785261dcf91570583eda9fef081 0df73a85e19d71612ab3a0ba03061123453ff2e3 Branches: master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=75964450ed12778ca06e2789124d87fc8b6f3945 Log: Merge branch 'break_iterator' * break_iterator: Fix typo in error message BreakIterator: fix compat with old ICU versions Fix build error one ext/intl BreakIterator::getPartsIterator: new optional arg Added IntlCodePointBreakIterator. Add Intl prefix to BreakIterator/RuleBasedBI Remove trailing space Replaced zend_parse_method_params with plain zpp BreakIter: Removed getAvailableLocales/getHashCode Change in BreakIterator::getPartsIterator() BreakIterator: add rules status constants Tests for (RuleBased)BreakIterator. BreakIterator and RuleBasedBreakiterator added Changed paths: MM ext/intl/php_intl.c Diff: -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] com php-src: Fix typo in error message: ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp ext/intl/tests/breakiter___construct_error.phpt
Commit:0df73a85e19d71612ab3a0ba03061123453ff2e3 Author:Gustavo André dos Santos Lopes cataphr...@php.net Mon, 25 Jun 2012 12:06:31 +0200 Parents: d8b067e66f4b458108821df512090ede623df214 Branches: master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=0df73a85e19d71612ab3a0ba03061123453ff2e3 Log: Fix typo in error message Changed paths: M ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp M ext/intl/tests/breakiter___construct_error.phpt Diff: diff --git a/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp b/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp index 41ebfe5..f2a39ba 100644 --- a/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp +++ b/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp @@ -77,7 +77,7 @@ static void _php_intlgregcal_constructor_body(INTERNAL_FUNCTION_PARAMETERS) rbbi = new RuleBasedBreakIterator((uint8_t*)rules, rules_len, status); if (U_FAILURE(status)) { intl_error_set(NULL, status, rbbi_create_instance: unable to - creaete instance from compiled rules, 0 TSRMLS_CC); + create instance from compiled rules, 0 TSRMLS_CC); RETURN_NULL(); } #else diff --git a/ext/intl/tests/breakiter___construct_error.phpt b/ext/intl/tests/breakiter___construct_error.phpt index 8d6a718..770f140 100644 --- a/ext/intl/tests/breakiter___construct_error.phpt +++ b/ext/intl/tests/breakiter___construct_error.phpt @@ -34,5 +34,5 @@ Warning: IntlRuleBasedBreakIterator::__construct() expects parameter 2 to be boo Warning: IntlRuleBasedBreakIterator::__construct(): rbbi_create_instance: bad arguments in %s on line %d NULL -Warning: IntlRuleBasedBreakIterator::__construct(): rbbi_create_instance: unable to creaete instance from compiled rules in %s on line %d +Warning: IntlRuleBasedBreakIterator::__construct(): rbbi_create_instance: unable to create instance from compiled rules in %s on line %d NULL -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] com php-src: Fix build error one ext/intl: ext/intl/breakiterator/codepointiterator_internal.cpp
Commit:5a9dca458a517f62fc596c57594a02c363c5a3c0 Author:Gustavo André dos Santos Lopes cataphr...@php.net Mon, 25 Jun 2012 11:53:20 +0200 Parents: 77daa3482d5592181560e0e6076c1e3291620e7b Branches: master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=5a9dca458a517f62fc596c57594a02c363c5a3c0 Log: Fix build error one ext/intl Changed paths: M ext/intl/breakiterator/codepointiterator_internal.cpp Diff: diff --git a/ext/intl/breakiterator/codepointiterator_internal.cpp b/ext/intl/breakiterator/codepointiterator_internal.cpp index 2dfae1a..e88f2ea 100644 --- a/ext/intl/breakiterator/codepointiterator_internal.cpp +++ b/ext/intl/breakiterator/codepointiterator_internal.cpp @@ -16,6 +16,7 @@ #include codepointiterator_internal.h #include unicode/uchriter.h +#include typeinfo //copied from cmemory.h, which is not public typedef union { @@ -283,4 +284,4 @@ CodePointBreakIterator CodePointBreakIterator::refreshInputText(UText *input, U } return *this; -} \ No newline at end of file +} -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] com php-src: BreakIterator: fix compat with old ICU versions: ext/intl/breakiterator/breakiterator_class.cpp ext/intl/breakiterator/codepointiterator_internal.cpp ext/intl/breakiterator/rule
Commit:d8b067e66f4b458108821df512090ede623df214 Author:Gustavo André dos Santos Lopes cataphr...@php.net Mon, 25 Jun 2012 12:03:27 +0200 Parents: 5a9dca458a517f62fc596c57594a02c363c5a3c0 Branches: master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=d8b067e66f4b458108821df512090ede623df214 Log: BreakIterator: fix compat with old ICU versions Changed paths: M ext/intl/breakiterator/breakiterator_class.cpp M ext/intl/breakiterator/codepointiterator_internal.cpp M ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp M ext/intl/tests/breakiter___construct_error.phpt M ext/intl/tests/rbbiter_getBinaryRules_basic.phpt Diff: diff --git a/ext/intl/breakiterator/breakiterator_class.cpp b/ext/intl/breakiterator/breakiterator_class.cpp index d193fc4..de4bfbb 100644 --- a/ext/intl/breakiterator/breakiterator_class.cpp +++ b/ext/intl/breakiterator/breakiterator_class.cpp @@ -312,7 +312,9 @@ static const zend_function_entry RuleBasedBreakIterator_class_functions[] = { PHP_ME_MAPPING(getRules,rbbi_get_rules, ainfo_biter_void, ZEND_ACC_PUBLIC) PHP_ME_MAPPING(getRuleStatus, rbbi_get_rule_status, ainfo_biter_void, ZEND_ACC_PUBLIC) PHP_ME_MAPPING(getRuleStatusVec, rbbi_get_rule_status_vec, ainfo_biter_void, ZEND_ACC_PUBLIC) +#if U_ICU_VERSION_MAJOR_NUM * 10 + U_ICU_VERSION_MINOR_NUM = 48 PHP_ME_MAPPING(getBinaryRules, rbbi_get_binary_rules, ainfo_biter_void, ZEND_ACC_PUBLIC) +#endif PHP_FE_END }; /* }}} */ @@ -329,7 +331,7 @@ static const zend_function_entry CodePointBreakIterator_class_functions[] = { /* {{{ breakiterator_register_BreakIterator_class * Initialize 'BreakIterator' class */ -void breakiterator_register_BreakIterator_class(TSRMLS_D) +U_CFUNC void breakiterator_register_BreakIterator_class(TSRMLS_D) { zend_class_entry ce; diff --git a/ext/intl/breakiterator/codepointiterator_internal.cpp b/ext/intl/breakiterator/codepointiterator_internal.cpp index e88f2ea..bf9239d 100644 --- a/ext/intl/breakiterator/codepointiterator_internal.cpp +++ b/ext/intl/breakiterator/codepointiterator_internal.cpp @@ -212,6 +212,10 @@ int32_t CodePointBreakIterator::next(int32_t n) { UBool res = utext_moveIndex32(this-fText, n); +#ifndef UTEXT_CURRENT32 +#define UTEXT_CURRENT32 utext_current32 +#endif + if (res) { this-lastCodePoint = UTEXT_CURRENT32(this-fText); return (int32_t)UTEXT_GETNATIVEINDEX(this-fText); diff --git a/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp b/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp index 288179a..41ebfe5 100644 --- a/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp +++ b/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp @@ -73,12 +73,18 @@ static void _php_intlgregcal_constructor_body(INTERNAL_FUNCTION_PARAMETERS) RETURN_NULL(); } } else { // compiled +#if U_ICU_VERSION_MAJOR_NUM * 10 + U_ICU_VERSION_MINOR_NUM = 48 rbbi = new RuleBasedBreakIterator((uint8_t*)rules, rules_len, status); if (U_FAILURE(status)) { intl_error_set(NULL, status, rbbi_create_instance: unable to creaete instance from compiled rules, 0 TSRMLS_CC); RETURN_NULL(); } +#else + intl_error_set(NULL, U_UNSUPPORTED_ERROR, rbbi_create_instance: + compiled rules require ICU = 4.8, 0 TSRMLS_CC); + RETURN_NULL(); +#endif } breakiterator_object_create(return_value, rbbi TSRMLS_CC); @@ -180,6 +186,7 @@ U_CFUNC PHP_FUNCTION(rbbi_get_rule_status_vec) delete[] rules; } +#if U_ICU_VERSION_MAJOR_NUM * 10 + U_ICU_VERSION_MINOR_NUM = 48 U_CFUNC PHP_FUNCTION(rbbi_get_binary_rules) { BREAKITER_METHOD_INIT_VARS; @@ -209,3 +216,4 @@ U_CFUNC PHP_FUNCTION(rbbi_get_binary_rules) RETURN_STRINGL(ret_rules, rules_len, 0); } +#endif diff --git a/ext/intl/tests/breakiter___construct_error.phpt b/ext/intl/tests/breakiter___construct_error.phpt index e96086d..8d6a718 100644 --- a/ext/intl/tests/breakiter___construct_error.phpt +++ b/ext/intl/tests/breakiter___construct_error.phpt @@ -1,5 +1,8 @@ --TEST-- IntlRuleBasedBreakIterator::__construct(): arg errors +--SKIPIF-- +?php if( !extension_loaded( 'intl' ) ) print 'skip'; ? +?php if(version_compare(INTL_ICU_VERSION, '4.8') 0) print 'skip ICU = 4.8 only'; ? --FILE-- ?php ini_set(intl.error_level, E_WARNING); diff --git
[PHP-CVS] com php-src: BreakIterator::getPartsIterator: new optional arg: ext/intl/breakiterator/breakiterator_class.cpp ext/intl/breakiterator/breakiterator_iterators.cpp ext/intl/breakiterator/break
Commit:77daa3482d5592181560e0e6076c1e3291620e7b Author:Gustavo André dos Santos Lopes cataphr...@php.net Fri, 22 Jun 2012 18:28:19 +0200 Parents: 0a7ae87e91368fe17c52767cfb31dabf3a94e38f Branches: master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=77daa3482d5592181560e0e6076c1e3291620e7b Log: BreakIterator::getPartsIterator: new optional arg Can take one of: * IntlPartsIterator::KEY_SEQUENTIAL (keys are 0, 1, ...) * IntlPartsIterator::KEY_LEFT (keys are left boundaries) * IntlPartsIterator::KEY_LEFT (keys are right boundaries) The default is IntlPartsIterator::KEY_SEQUENTIAL (the previous behavior). Changed paths: M ext/intl/breakiterator/breakiterator_class.cpp M ext/intl/breakiterator/breakiterator_iterators.cpp M ext/intl/breakiterator/breakiterator_iterators.h M ext/intl/breakiterator/breakiterator_methods.cpp A ext/intl/tests/breakiter_getPartsIterator_error.phpt A ext/intl/tests/breakiter_getPartsIterator_var1.phpt diff --git a/ext/intl/breakiterator/breakiterator_class.cpp b/ext/intl/breakiterator/breakiterator_class.cpp index 6335502..d193fc4 100644 --- a/ext/intl/breakiterator/breakiterator_class.cpp +++ b/ext/intl/breakiterator/breakiterator_class.cpp @@ -264,6 +264,10 @@ ZEND_BEGIN_ARG_INFO_EX(ainfo_biter_get_locale, 0, 0, 1) ZEND_ARG_INFO(0, locale_type) ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_INFO_EX(ainfo_biter_getPartsIterator, 0, 0, 0) + ZEND_ARG_INFO(0, key_type) +ZEND_END_ARG_INFO() + ZEND_BEGIN_ARG_INFO_EX(ainfo_rbbi___construct, 0, 0, 1) ZEND_ARG_INFO(0, rules) ZEND_ARG_INFO(0, areCompiled) @@ -293,7 +297,7 @@ static const zend_function_entry BreakIterator_class_functions[] = { PHP_ME_MAPPING(preceding, breakiter_preceding,ainfo_biter_offset, ZEND_ACC_PUBLIC) PHP_ME_MAPPING(isBoundary, breakiter_is_boundary, ainfo_biter_offset, ZEND_ACC_PUBLIC) PHP_ME_MAPPING(getLocale, breakiter_get_locale, ainfo_biter_void, ZEND_ACC_PUBLIC) - PHP_ME_MAPPING(getPartsIterator, breakiter_get_parts_iterator, ainfo_biter_void, ZEND_ACC_PUBLIC) + PHP_ME_MAPPING(getPartsIterator, breakiter_get_parts_iterator, ainfo_biter_getPartsIterator, ZEND_ACC_PUBLIC) PHP_ME_MAPPING(getErrorCode, breakiter_get_error_code, ainfo_biter_void, ZEND_ACC_PUBLIC) PHP_ME_MAPPING(getErrorMessage, breakiter_get_error_message,ainfo_biter_void, ZEND_ACC_PUBLIC) diff --git a/ext/intl/breakiterator/breakiterator_iterators.cpp b/ext/intl/breakiterator/breakiterator_iterators.cpp index d3ad050..d88ad8a 100644 --- a/ext/intl/breakiterator/breakiterator_iterators.cpp +++ b/ext/intl/breakiterator/breakiterator_iterators.cpp @@ -130,6 +130,7 @@ U_CFUNC zend_object_iterator *_breakiterator_get_iterator( typedef struct zoi_break_iter_parts { zoi_with_current zoi_cur; + parts_iter_key_type key_type; BreakIterator_object *bio; /* so we don't have to fetch it all the time */ } zoi_break_iter_parts; @@ -138,6 +139,16 @@ static void _breakiterator_parts_destroy_it(zend_object_iterator *iter TSRMLS_DC zval_ptr_dtor(reinterpret_castzval**(iter-data)); } +static int _breakiterator_parts_get_current_key(zend_object_iterator *iter, + char **str_key, + uint *str_key_len, + ulong *int_key TSRMLS_DC) +{ + /* the actual work is done in move_forward and rewind */ + *int_key = iter-index; + return HASH_KEY_IS_LONG; +} + static void _breakiterator_parts_move_forward(zend_object_iterator *iter TSRMLS_DC) { zoi_break_iter_parts *zoi_bit = (zoi_break_iter_parts*)iter; @@ -157,6 +168,14 @@ static void _breakiterator_parts_move_forward(zend_object_iterator *iter TSRMLS_ return; } + if (zoi_bit-key_type == PARTS_ITERATOR_KEY_LEFT) { + iter-index = cur; + } else if (zoi_bit-key_type == PARTS_ITERATOR_KEY_RIGHT) { + iter-index = next; + } + /* else zoi_bit-key_type == PARTS_ITERATOR_KEY_SEQUENTIAL +* No need to do anything, the engine increments -index */ + const char *s = Z_STRVAL_P(bio-text); int32_t slen =
[PHP-CVS] com php-src: Added IntlCodePointBreakIterator.: ext/intl/breakiterator/breakiterator_class.cpp ext/intl/breakiterator/breakiterator_methods.cpp ext/intl/breakiterator/breakiterator_methods.h
Commit:0a7ae87e91368fe17c52767cfb31dabf3a94e38f Author:Gustavo André dos Santos Lopes cataphr...@php.net Fri, 22 Jun 2012 18:19:54 +0200 Parents: cee31091a960014ce5315008fc64437d04174caf Branches: master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=0a7ae87e91368fe17c52767cfb31dabf3a94e38f Log: Added IntlCodePointBreakIterator. Objects of this class can be instantiated with IntlBreakIterator::createCodePointInstance() The method does not take a locale, as it would not make sense in this context. This class has one additional method: long IntlCodePointIterator::getLastCodePoint() which returns either -1 or the last code point we moved over, if any (and discounting any movement before the last call to IntlBreakIterator::first() or IntlBreakIterator::last()). Changed paths: M ext/intl/breakiterator/breakiterator_class.cpp M ext/intl/breakiterator/breakiterator_methods.cpp M ext/intl/breakiterator/breakiterator_methods.h A ext/intl/breakiterator/codepointiterator_internal.cpp A ext/intl/breakiterator/codepointiterator_internal.h A ext/intl/breakiterator/codepointiterator_methods.cpp A ext/intl/breakiterator/codepointiterator_methods.h M ext/intl/config.m4 M ext/intl/config.w32 A ext/intl/tests/breakiter_createCodePointInstance_basic.phpt A ext/intl/tests/breakiter_createCodePointInstance_error.phpt A ext/intl/tests/cpbi_clone_equality.phpt A ext/intl/tests/cpbi_getLastCodePoint_basic.phpt A ext/intl/tests/cpbi_getLastCodePoint_error.phpt A ext/intl/tests/cpbi_parts_iterator.phpt diff --git a/ext/intl/breakiterator/breakiterator_class.cpp b/ext/intl/breakiterator/breakiterator_class.cpp index 8c25314..6335502 100644 --- a/ext/intl/breakiterator/breakiterator_class.cpp +++ b/ext/intl/breakiterator/breakiterator_class.cpp @@ -20,6 +20,7 @@ #include unicode/brkiter.h #include unicode/rbbi.h +#include codepointiterator_internal.h #include breakiterator_iterators.h @@ -30,14 +31,18 @@ extern C { #include breakiterator_class.h #include breakiterator_methods.h #include rulebasedbreakiterator_methods.h +#include codepointiterator_methods.h #include zend_exceptions.h #include zend_interfaces.h #include assert.h } +using PHP::CodePointBreakIterator; + /* {{{ Global variables */ zend_class_entry *BreakIterator_ce_ptr; zend_class_entry *RuleBasedBreakIterator_ce_ptr; +zend_class_entry *CodePointBreakIterator_ce_ptr; zend_object_handlers BreakIterator_handlers; /* }}} */ @@ -49,6 +54,8 @@ U_CFUNC void breakiterator_object_create(zval *object, if (classId == RuleBasedBreakIterator::getStaticClassID()) { ce = RuleBasedBreakIterator_ce_ptr; + } else if (classId == CodePointBreakIterator::getStaticClassID()) { + ce = CodePointBreakIterator_ce_ptr; } else { ce = BreakIterator_ce_ptr; } @@ -274,6 +281,7 @@ static const zend_function_entry BreakIterator_class_functions[] = { PHP_ME_MAPPING(createCharacterInstance, breakiter_create_character_instance,ainfo_biter_locale, ZEND_ACC_STATIC | ZEND_ACC_PUBLIC) PHP_ME_MAPPING(createSentenceInstance, breakiter_create_sentence_instance, ainfo_biter_locale, ZEND_ACC_STATIC | ZEND_ACC_PUBLIC) PHP_ME_MAPPING(createTitleInstance, breakiter_create_title_instance,ainfo_biter_locale, ZEND_ACC_STATIC | ZEND_ACC_PUBLIC) + PHP_ME_MAPPING(createCodePointInstance, breakiter_create_code_point_instance, ainfo_biter_void, ZEND_ACC_STATIC | ZEND_ACC_PUBLIC) PHP_ME_MAPPING(getText, breakiter_get_text, ainfo_biter_void, ZEND_ACC_PUBLIC) PHP_ME_MAPPING(setText, breakiter_set_text, ainfo_biter_setText,ZEND_ACC_PUBLIC) PHP_ME_MAPPING(first, breakiter_first, ainfo_biter_void, ZEND_ACC_PUBLIC) @@ -305,6 +313,14 @@ static const zend_function_entry RuleBasedBreakIterator_class_functions[] = { }; /* }}} */ +/* {{{ CodePointBreakIterator_class_functions + */ +static const zend_function_entry CodePointBreakIterator_class_functions[] = { + PHP_ME_MAPPING(getLastCodePoint, cpbi_get_last_code_point, ainfo_biter_void, ZEND_ACC_PUBLIC) + PHP_FE_END +}; +/* }}} */ + /* {{{ breakiterator_register_BreakIterator_class * Initialize 'BreakIterator' class @@ -364,6 +380,12 @@ void breakiterator_register_BreakIterator_class(TSRMLS_D)
[PHP-CVS] com php-src: Replaced zend_parse_method_params with plain zpp: ext/intl/breakiterator/breakiterator_methods.cpp ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp
Commit:a4925fae9b89dcd7912dce5852b4170a978e1bd0 Author:Gustavo André dos Santos Lopes cataphr...@php.net Sun, 10 Jun 2012 00:23:09 +0200 Parents: afed66bb9efc0a8838f2061c4a3aa0befec0f98c Branches: master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=a4925fae9b89dcd7912dce5852b4170a978e1bd0 Log: Replaced zend_parse_method_params with plain zpp Changed paths: M ext/intl/breakiterator/breakiterator_methods.cpp M ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp Diff: diff --git a/ext/intl/breakiterator/breakiterator_methods.cpp b/ext/intl/breakiterator/breakiterator_methods.cpp index 2855105..6777f90 100644 --- a/ext/intl/breakiterator/breakiterator_methods.cpp +++ b/ext/intl/breakiterator/breakiterator_methods.cpp @@ -110,9 +110,9 @@ U_CFUNC PHP_FUNCTION(breakiter_create_title_instance) U_CFUNC PHP_FUNCTION(breakiter_get_text) { BREAKITER_METHOD_INIT_VARS; + object = getThis(); - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), O, - object, BreakIterator_ce_ptr) == FAILURE) { + if (zend_parse_parameters_none() == FAILURE) { intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR, breakiter_get_text: bad arguments, 0 TSRMLS_CC); RETURN_FALSE; @@ -134,9 +134,10 @@ U_CFUNC PHP_FUNCTION(breakiter_set_text) UText *ut = NULL; zval**textzv; BREAKITER_METHOD_INIT_VARS; + object = getThis(); - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), Os, - object, BreakIterator_ce_ptr, text, text_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, s, + text, text_len) == FAILURE) { intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR, breakiter_set_text: bad arguments, 0 TSRMLS_CC); RETURN_FALSE; @@ -178,9 +179,9 @@ static void _breakiter_no_args_ret_int32( { char*msg; BREAKITER_METHOD_INIT_VARS; + object = getThis(); - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), O, - object, BreakIterator_ce_ptr) == FAILURE) { + if (zend_parse_parameters_none() == FAILURE) { spprintf(msg, NULL, %s: bad arguments, func_name); intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR, msg, 1 TSRMLS_CC); efree(msg); @@ -202,9 +203,9 @@ static void _breakiter_int32_ret_int32( char*msg; longarg; BREAKITER_METHOD_INIT_VARS; + object = getThis(); - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), Ol, - object, BreakIterator_ce_ptr, arg) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, l, arg) == FAILURE) { spprintf(msg, NULL, %s: bad arguments, func_name); intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR, msg, 1 TSRMLS_CC); efree(msg); @@ -279,9 +280,9 @@ U_CFUNC PHP_FUNCTION(breakiter_next) U_CFUNC PHP_FUNCTION(breakiter_current) { BREAKITER_METHOD_INIT_VARS; + object = getThis(); - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), O, - object, BreakIterator_ce_ptr) == FAILURE) { + if (zend_parse_parameters_none() == FAILURE) { intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR, breakiter_current: bad arguments, 0 TSRMLS_CC); RETURN_FALSE; @@ -312,9 +313,10 @@ U_CFUNC PHP_FUNCTION(breakiter_is_boundary) { long offset; BREAKITER_METHOD_INIT_VARS; + object = getThis(); - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), Ol, - object, BreakIterator_ce_ptr, offset) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, l, + offset) == FAILURE) { intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR, breakiter_is_boundary: bad arguments, 0 TSRMLS_CC); RETURN_FALSE; @@ -338,9 +340,9 @@ U_CFUNC PHP_FUNCTION(breakiter_get_locale) { longlocale_type; BREAKITER_METHOD_INIT_VARS; + object = getThis(); - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), - Ol, object, BreakIterator_ce_ptr, locale_type) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, l, locale_type) == FAILURE) { intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR, breakiter_get_locale: bad arguments, 0 TSRMLS_CC); RETURN_FALSE; @@ -365,9 +367,9 @@ U_CFUNC PHP_FUNCTION(breakiter_get_locale) U_CFUNC PHP_FUNCTION(breakiter_get_parts_iterator) {
[PHP-CVS] com php-src: BreakIter: Removed getAvailableLocales/getHashCode: ext/intl/breakiterator/breakiterator_class.cpp ext/intl/breakiterator/breakiterator_methods.cpp ext/intl/breakiterator/breaki
Commit:afed66bb9efc0a8838f2061c4a3aa0befec0f98c Author:Gustavo André dos Santos Lopes cataphr...@php.net Sat, 9 Jun 2012 23:59:26 +0200 Parents: 4ec75539dba8cefef16e56f02c62755a9aa9c60b Branches: master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=afed66bb9efc0a8838f2061c4a3aa0befec0f98c Log: BreakIter: Removed getAvailableLocales/getHashCode Changed paths: M ext/intl/breakiterator/breakiterator_class.cpp M ext/intl/breakiterator/breakiterator_methods.cpp M ext/intl/breakiterator/breakiterator_methods.h M ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp M ext/intl/breakiterator/rulebasedbreakiterator_methods.h D ext/intl/tests/breakiter_getAvailableLocales_basic.phpt D ext/intl/tests/breakiter_getAvailableLocales_error.phpt D ext/intl/tests/rbbiter_hashCode_basic.phpt Diff: diff --git a/ext/intl/breakiterator/breakiterator_class.cpp b/ext/intl/breakiterator/breakiterator_class.cpp index f273a2f..f9ea794 100644 --- a/ext/intl/breakiterator/breakiterator_class.cpp +++ b/ext/intl/breakiterator/breakiterator_class.cpp @@ -274,7 +274,6 @@ static const zend_function_entry BreakIterator_class_functions[] = { PHP_ME_MAPPING(createCharacterInstance, breakiter_create_character_instance,ainfo_biter_locale, ZEND_ACC_STATIC | ZEND_ACC_PUBLIC) PHP_ME_MAPPING(createSentenceInstance, breakiter_create_sentence_instance, ainfo_biter_locale, ZEND_ACC_STATIC | ZEND_ACC_PUBLIC) PHP_ME_MAPPING(createTitleInstance, breakiter_create_title_instance,ainfo_biter_locale, ZEND_ACC_STATIC | ZEND_ACC_PUBLIC) - PHP_ME_MAPPING(getAvailableLocales, breakiter_get_available_locales,ainfo_biter_void, ZEND_ACC_STATIC | ZEND_ACC_PUBLIC) PHP_ME_MAPPING(getText, breakiter_get_text, ainfo_biter_void, ZEND_ACC_PUBLIC) PHP_ME_MAPPING(setText, breakiter_set_text, ainfo_biter_setText,ZEND_ACC_PUBLIC) PHP_ME_MAPPING(first, breakiter_first, ainfo_biter_void, ZEND_ACC_PUBLIC) @@ -298,7 +297,6 @@ static const zend_function_entry BreakIterator_class_functions[] = { */ static const zend_function_entry RuleBasedBreakIterator_class_functions[] = { PHP_ME(RuleBasedBreakIterator, __construct, ainfo_rbbi___construct, ZEND_ACC_PUBLIC) - PHP_ME_MAPPING(hashCode,rbbi_hash_code, ainfo_biter_void, ZEND_ACC_PUBLIC) PHP_ME_MAPPING(getRules,rbbi_get_rules, ainfo_biter_void, ZEND_ACC_PUBLIC) PHP_ME_MAPPING(getRuleStatus, rbbi_get_rule_status, ainfo_biter_void, ZEND_ACC_PUBLIC) PHP_ME_MAPPING(getRuleStatusVec, rbbi_get_rule_status_vec, ainfo_biter_void, ZEND_ACC_PUBLIC) diff --git a/ext/intl/breakiterator/breakiterator_methods.cpp b/ext/intl/breakiterator/breakiterator_methods.cpp index 4aca6ef..2855105 100644 --- a/ext/intl/breakiterator/breakiterator_methods.cpp +++ b/ext/intl/breakiterator/breakiterator_methods.cpp @@ -107,27 +107,6 @@ U_CFUNC PHP_FUNCTION(breakiter_create_title_instance) INTERNAL_FUNCTION_PARAM_PASSTHRU); } -U_CFUNC PHP_FUNCTION(breakiter_get_available_locales) -{ - intl_error_reset(NULL TSRMLS_CC); - - if (zend_parse_parameters_none() == FAILURE) { - intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR, - breakiter_get_available_locales: bad arguments, 0 TSRMLS_CC); - RETURN_FALSE; - } - - const Locale *locales; - int32_t count; - - locales = BreakIterator::getAvailableLocales(count); - array_init_size(return_value, (uint)count); - for (int i = 0; i count; i++) { - Locale locale = locales[i]; - add_next_index_string(return_value, locale.getName(), 1); - } -} - U_CFUNC PHP_FUNCTION(breakiter_get_text) { BREAKITER_METHOD_INIT_VARS; diff --git a/ext/intl/breakiterator/breakiterator_methods.h
[PHP-CVS] com php-src: Change in BreakIterator::getPartsIterator(): ext/intl/breakiterator/breakiterator_iterators.cpp ext/intl/breakiterator/breakiterator_iterators.h ext/intl/common/common_enum.cpp
Commit:4ec75539dba8cefef16e56f02c62755a9aa9c60b Author:Gustavo André dos Santos Lopes cataphr...@php.net Thu, 7 Jun 2012 15:20:00 +0200 Parents: c6593a0e9b3ea1a6045f8a52a1b9d8bce4d63773 Branches: master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=4ec75539dba8cefef16e56f02c62755a9aa9c60b Log: Change in BreakIterator::getPartsIterator() BreakIterator::getPartsIterator() now returns an IntlIterator subclass with a special method, getBreakIterator(), that returns the associated BreakIterator. Any call to getRuleStatus() is forwarded to the BreakIterator. Changed paths: M ext/intl/breakiterator/breakiterator_iterators.cpp M ext/intl/breakiterator/breakiterator_iterators.h M ext/intl/common/common_enum.cpp M ext/intl/common/common_enum.h M ext/intl/php_intl.c M ext/intl/tests/breakiter_getPartsIterator_basic.phpt Diff: diff --git a/ext/intl/breakiterator/breakiterator_iterators.cpp b/ext/intl/breakiterator/breakiterator_iterators.cpp index 4a0cf1d..66f4292 100644 --- a/ext/intl/breakiterator/breakiterator_iterators.cpp +++ b/ext/intl/breakiterator/breakiterator_iterators.cpp @@ -18,7 +18,10 @@ #include config.h #endif +#include unicode/brkiter.h + #include breakiterator_iterators.h +#include ../common/common_enum.h extern C { #define USE_BREAKITERATOR_POINTER @@ -28,6 +31,9 @@ extern C { #include zend_exceptions.h } +static zend_class_entry *IntlPartsIterator_ce_ptr; +static zend_object_handlers IntlPartsIterator_handlers; + /* BreakIterator's iterator */ inline BreakIterator *_breakiter_prolog(zend_object_iterator *iter TSRMLS_DC) @@ -201,7 +207,7 @@ void IntlIterator_from_BreakIterator_parts(zval *break_iter_zv, zval_add_ref(break_iter_zv); - object_init_ex(object, IntlIterator_ce_ptr); + object_init_ex(object, IntlPartsIterator_ce_ptr); ii = (IntlIterator_object*)zend_object_store_get_object(object TSRMLS_CC); ii-iterator = (zend_object_iterator*)emalloc(sizeof(zoi_break_iter_parts)); @@ -216,3 +222,94 @@ void IntlIterator_from_BreakIterator_parts(zval *break_iter_zv, zend_object_store_get_object(break_iter_zv TSRMLS_CC); assert(((zoi_break_iter_parts*)ii-iterator)-bio-biter != NULL); } + +U_CFUNC zend_object_value IntlPartsIterator_object_create(zend_class_entry *ce TSRMLS_DC) +{ + zend_object_value retval; + + retval = IntlIterator_ce_ptr-create_object(ce TSRMLS_CC); + retval.handlers = IntlPartsIterator_handlers; + + return retval; +} + +U_CFUNC zend_function *IntlPartsIterator_get_method(zval **object_ptr, + char *method, int method_len, const zend_literal *key TSRMLS_DC) +{ + zend_literal local_literal = {0}; + zend_function *ret; + ALLOCA_FLAG(use_heap) + + if (key == NULL) { + Z_STRVAL(local_literal.constant) = static_castchar*( + do_alloca(method_len + 1, use_heap)); + zend_str_tolower_copy(Z_STRVAL(local_literal.constant), + method, method_len); + local_literal.hash_value = zend_hash_func( + Z_STRVAL(local_literal.constant), method_len + 1); + key = local_literal; + } + + if ((key-hash_value 0x) == 0xA2B486A1 /* hash of getrulestatus\0 */ +method_len == sizeof(getrulestatus) - 1 +memcmp(getrulestatus, Z_STRVAL(key-constant), method_len) == 0) { + IntlIterator_object *obj = (IntlIterator_object*) + zend_object_store_get_object(*object_ptr TSRMLS_CC); + if (obj-iterator obj-iterator-data) { + zval *break_iter_zv = static_castzval*(obj-iterator-data); + *object_ptr = break_iter_zv; + ret = Z_OBJ_HANDLER_P(break_iter_zv, get_method)(object_ptr, + method, method_len, key TSRMLS_CC); + goto end; + } + } + + ret = std_object_handlers.get_method(object_ptr, + method, method_len, key TSRMLS_CC); + +end: + if (key == local_literal) { + free_alloca(Z_STRVAL(local_literal.constant), use_heap); + } + + return ret; +} + +U_CFUNC PHP_METHOD(IntlPartsIterator, getBreakIterator) +{ + INTLITERATOR_METHOD_INIT_VARS; + + if (zend_parse_parameters_none() == FAILURE) { + intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR, + IntlPartsIterator::getBreakIterator: bad arguments, 0 TSRMLS_CC); + return; + } + + INTLITERATOR_METHOD_FETCH_OBJECT; + + zval *biter_zval = static_castzval*(ii-iterator-data); + RETURN_ZVAL(biter_zval, 1, 0); +} + +ZEND_BEGIN_ARG_INFO_EX(ainfo_parts_it_void, 0, 0, 0) +ZEND_END_ARG_INFO()
[PHP-CVS] com php-src: BreakIterator: add rules status constants: ext/intl/breakiterator/breakiterator_class.cpp
Commit:c6593a0e9b3ea1a6045f8a52a1b9d8bce4d63773 Author:Gustavo André dos Santos Lopes cataphr...@php.net Mon, 4 Jun 2012 23:09:10 +0200 Parents: 036b1eb2912872ade10e35f26daf10c65cc3cdea Branches: master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=c6593a0e9b3ea1a6045f8a52a1b9d8bce4d63773 Log: BreakIterator: add rules status constants Changed paths: M ext/intl/breakiterator/breakiterator_class.cpp Diff: diff --git a/ext/intl/breakiterator/breakiterator_class.cpp b/ext/intl/breakiterator/breakiterator_class.cpp index 47e5fb5..f273a2f 100644 --- a/ext/intl/breakiterator/breakiterator_class.cpp +++ b/ext/intl/breakiterator/breakiterator_class.cpp @@ -333,6 +333,35 @@ void breakiterator_register_BreakIterator_class(TSRMLS_D) zend_declare_class_constant_long(BreakIterator_ce_ptr, DONE, sizeof(DONE) - 1, BreakIterator::DONE TSRMLS_CC ); + /* Declare constants that are defined in the C header */ +#define BREAKITER_DECL_LONG_CONST(name) \ + zend_declare_class_constant_long(BreakIterator_ce_ptr, #name, \ + sizeof(#name) - 1, UBRK_ ## name TSRMLS_CC) + + BREAKITER_DECL_LONG_CONST(WORD_NONE); + BREAKITER_DECL_LONG_CONST(WORD_NONE_LIMIT); + BREAKITER_DECL_LONG_CONST(WORD_NUMBER); + BREAKITER_DECL_LONG_CONST(WORD_NUMBER_LIMIT); + BREAKITER_DECL_LONG_CONST(WORD_LETTER); + BREAKITER_DECL_LONG_CONST(WORD_LETTER_LIMIT); + BREAKITER_DECL_LONG_CONST(WORD_KANA); + BREAKITER_DECL_LONG_CONST(WORD_KANA_LIMIT); + BREAKITER_DECL_LONG_CONST(WORD_IDEO); + BREAKITER_DECL_LONG_CONST(WORD_IDEO_LIMIT); + + BREAKITER_DECL_LONG_CONST(LINE_SOFT); + BREAKITER_DECL_LONG_CONST(LINE_SOFT_LIMIT); + BREAKITER_DECL_LONG_CONST(LINE_HARD); + BREAKITER_DECL_LONG_CONST(LINE_HARD_LIMIT); + + BREAKITER_DECL_LONG_CONST(SENTENCE_TERM); + BREAKITER_DECL_LONG_CONST(SENTENCE_TERM_LIMIT); + BREAKITER_DECL_LONG_CONST(SENTENCE_SEP); + BREAKITER_DECL_LONG_CONST(SENTENCE_SEP_LIMIT); + +#undef BREAKITER_DECL_LONG_CONST + + /* Create and register 'RuleBasedBreakIterator' class. */ INIT_CLASS_ENTRY(ce, RuleBasedBreakIterator, RuleBasedBreakIterator_class_functions); -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] com php-src: Fix bug #62373 (serialize() generates wrong reference to the object): ext/standard/tests/serialize/bug62373.phpt ext/standard/var.c
Commit:e42718227945202044516c71f0098fe464987410 Author:Moriyoshi Koizumi m...@mozo.jp Mon, 25 Jun 2012 19:13:23 +0900 Parents: 5b3f4d25ea047f14d6485fb6f456cece384d33ee Branches: PHP-5.3 Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=e42718227945202044516c71f0098fe464987410 Log: Fix bug #62373 (serialize() generates wrong reference to the object) Bugs: https://bugs.php.net/62373 Changed paths: A ext/standard/tests/serialize/bug62373.phpt M ext/standard/var.c Diff: diff --git a/ext/standard/tests/serialize/bug62373.phpt b/ext/standard/tests/serialize/bug62373.phpt new file mode 100644 index 000..666c33e --- /dev/null +++ b/ext/standard/tests/serialize/bug62373.phpt @@ -0,0 +1,25 @@ +--TEST-- +Bug #62373 (serialize() generates wrong reference to the object) +--FILE-- +?php +class A {} +class B {} + +$size_of_ce = (((int)(log(PHP_INT_MAX) / log(2)) + 1 == 32 ? 368: 680) + 15) ~15; +$dummy = array(); +$b = new B(); +$period = $size_of_ce 5; +for ($i = 0; $i $period * 3; $i++) { +$a = new A(); +$s = unserialize(serialize(array($b, $a))); +if ($s[0] === $s[1]) { +echo OOPS\n; +break; +} +$dummy[] = $a; +} + +echo OK\n; +? +--EXPECT-- +OK diff --git a/ext/standard/var.c b/ext/standard/var.c index ddcfde0..3e2a45c 100644 --- a/ext/standard/var.c +++ b/ext/standard/var.c @@ -544,12 +544,9 @@ static inline int php_add_var_hash(HashTable *var_hash, zval *var, void *var_old /* relies on (long) being a perfect hash function for data pointers, * however the actual identity of an object has had to be determined -* by its object handle and the class entry since 5.0. */ +* by its object handle since 5.0. */ if ((Z_TYPE_P(var) == IS_OBJECT) Z_OBJ_HT_P(var)-get_class_entry) { - p = smart_str_print_long(id + sizeof(id) - 1, - (((size_t)Z_OBJCE_P(var) 5) - | ((size_t)Z_OBJCE_P(var) (sizeof(long) * 8 - 5))) - + (long) Z_OBJ_HANDLE_P(var)); + p = smart_str_print_long(id + sizeof(id) - 1, (long) Z_OBJ_HANDLE_P(var)); *(--p) = 'O'; len = id + sizeof(id) - 1 - p; } else { -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] com php-src: Fix bug #62373 (serialize() generates wrong reference to the object): ext/standard/tests/serialize/bug62373.phpt ext/standard/var.c
Commit:91e1df704eed40325fd963a308e466bbbf96184f Author:Moriyoshi Koizumi m...@mozo.jp Mon, 25 Jun 2012 19:13:23 +0900 Parents: ad641950b3d047fc20729b7a18c62b414622cc79 Branches: PHP-5.4 master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=91e1df704eed40325fd963a308e466bbbf96184f Log: Fix bug #62373 (serialize() generates wrong reference to the object) Bugs: https://bugs.php.net/62373 Changed paths: A ext/standard/tests/serialize/bug62373.phpt M ext/standard/var.c Diff: diff --git a/ext/standard/tests/serialize/bug62373.phpt b/ext/standard/tests/serialize/bug62373.phpt new file mode 100644 index 000..666c33e --- /dev/null +++ b/ext/standard/tests/serialize/bug62373.phpt @@ -0,0 +1,25 @@ +--TEST-- +Bug #62373 (serialize() generates wrong reference to the object) +--FILE-- +?php +class A {} +class B {} + +$size_of_ce = (((int)(log(PHP_INT_MAX) / log(2)) + 1 == 32 ? 368: 680) + 15) ~15; +$dummy = array(); +$b = new B(); +$period = $size_of_ce 5; +for ($i = 0; $i $period * 3; $i++) { +$a = new A(); +$s = unserialize(serialize(array($b, $a))); +if ($s[0] === $s[1]) { +echo OOPS\n; +break; +} +$dummy[] = $a; +} + +echo OK\n; +? +--EXPECT-- +OK diff --git a/ext/standard/var.c b/ext/standard/var.c index c6126e9..735d0a7 100644 --- a/ext/standard/var.c +++ b/ext/standard/var.c @@ -541,12 +541,9 @@ static inline int php_add_var_hash(HashTable *var_hash, zval *var, void *var_old /* relies on (long) being a perfect hash function for data pointers, * however the actual identity of an object has had to be determined -* by its object handle and the class entry since 5.0. */ +* by its object handle since 5.0. */ if ((Z_TYPE_P(var) == IS_OBJECT) Z_OBJ_HT_P(var)-get_class_entry) { - p = smart_str_print_long(id + sizeof(id) - 1, - (((size_t)Z_OBJCE_P(var) 5) - | ((size_t)Z_OBJCE_P(var) (sizeof(long) * 8 - 5))) - + (long) Z_OBJ_HANDLE_P(var)); + p = smart_str_print_long(id + sizeof(id) - 1, (long) Z_OBJ_HANDLE_P(var)); *(--p) = 'O'; len = id + sizeof(id) - 1 - p; } else { -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] com php-src: BFN: NEWS
Commit:ce2082d24f2461b6403e13563ed18656a95581fa Author:Moriyoshi Koizumi m...@mozo.jp Mon, 25 Jun 2012 19:20:38 +0900 Parents: e42718227945202044516c71f0098fe464987410 Branches: PHP-5.3 Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=ce2082d24f2461b6403e13563ed18656a95581fa Log: BFN Changed paths: M NEWS Diff: diff --git a/NEWS b/NEWS index b9bb009..63e91f5 100644 --- a/NEWS +++ b/NEWS @@ -92,6 +92,8 @@ PHP NEWS (Anatoliy) . Fixed bug #61991 (long overflow in realpath_cache_get()). (Anatoliy) . Changed php://fd to be available only for CLI. + . Fixed bug #62373 (serialize() generates wrong reference to the object). +(Moriyoshi) - Fileinfo: . Fixed bug #61812 (Uninitialised value used in libmagic). -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php