diff options
author | Ondřej Surý <ondrej@sury.org> | 2014-06-27 15:14:42 +0200 |
---|---|---|
committer | Ondřej Surý <ondrej@sury.org> | 2014-06-27 15:14:42 +0200 |
commit | 3ca6d1dd5d8c32b17a52b0fa965c5eba28f368ed (patch) | |
tree | b4d659bad0443456239557ae3e08e953ead97494 /ext/intl/locale/locale_methods.c | |
parent | 675f42e16d209ea58fdaa63f7f45581a264e86c4 (diff) | |
download | php-upstream/5.5.14+dfsg.tar.gz |
New upstream version 5.5.14+dfsgupstream/5.5.14+dfsg
Diffstat (limited to 'ext/intl/locale/locale_methods.c')
-rw-r--r-- | ext/intl/locale/locale_methods.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/ext/intl/locale/locale_methods.c b/ext/intl/locale/locale_methods.c index 21b5847f2..e34dd8836 100644 --- a/ext/intl/locale/locale_methods.c +++ b/ext/intl/locale/locale_methods.c @@ -269,8 +269,7 @@ static char* get_icu_value_internal( const char* loc_name , char* tag_name, int* grOffset = findOffset( LOC_GRANDFATHERED , loc_name ); if( grOffset >= 0 ){ if( strcmp(tag_name , LOC_LANG_TAG)==0 ){ - tag_value = estrdup(loc_name); - return tag_value; + return estrdup(loc_name); } else { /* Since Grandfathered , no value , do nothing , retutn NULL */ return NULL; @@ -280,8 +279,8 @@ static char* get_icu_value_internal( const char* loc_name , char* tag_name, int* if( fromParseLocale==1 ){ /* Handle singletons */ if( strcmp(tag_name , LOC_LANG_TAG)==0 ){ - if( strlen(loc_name)>1 && (isIDPrefix(loc_name) ==1 ) ){ - return (char *)loc_name; + if( strlen(loc_name)>1 && isIDPrefix(loc_name) ){ + return estrdup(loc_name); } } @@ -498,8 +497,16 @@ static void get_icu_disp_value_src_php( char* tag_name, INTERNAL_FUNCTION_PARAME RETURN_FALSE; } + if(loc_name_len > ULOC_FULLNAME_CAPACITY) { + /* See bug 67397: overlong locale names cause trouble in uloc_getDisplayName */ + spprintf(&msg , 0, "locale_get_display_%s : name too long", tag_name ); + intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, msg , 1 TSRMLS_CC ); + efree(msg); + RETURN_FALSE; + } + if(loc_name_len == 0) { - loc_name = intl_locale_get_default(TSRMLS_C); + loc_name = INTL_G(default_locale); } if( strcmp(tag_name, DISP_NAME) != 0 ){ |