]> granicus.if.org Git - php/commitdiff
Fixed bug #72658 Locale::lookup() / locale_lookup() hangs if no match found
authorAnatol Belski <ab@php.net>
Mon, 25 Jul 2016 10:47:48 +0000 (12:47 +0200)
committerAnatol Belski <ab@php.net>
Mon, 25 Jul 2016 10:49:13 +0000 (12:49 +0200)
ext/intl/locale/locale_methods.c
ext/intl/tests/locale_bug72658.phpt [new file with mode: 0644]

index c91287cc7b1c6f6b4a9ed03232851393b732a6d7..5a0c715a429b952d4bbb6308513ef9b326ef5ba9 100644 (file)
@@ -145,10 +145,10 @@ static char* getPreferredTag(const char* gf_tag)
 * or -1 if no token
 * strtokr equivalent search for token in reverse direction
 */
-static int getStrrtokenPos(char* str, int savedPos)
+static zend_off_t getStrrtokenPos(char* str, zend_off_t savedPos)
 {
-       int result =-1;
-       int i;
+       zend_off_t result =-1;
+       zend_off_t i;
 
        for(i=savedPos-1; i>=0; i--) {
                if(isIDSeparator(*(str+i)) ){
@@ -1429,7 +1429,7 @@ static zend_string* lookup_loc_range(const char* loc_range, HashTable* hash_arr,
 
        char* cur_loc_range     = NULL;
        zend_string* can_loc_range      = NULL;
-       size_t  saved_pos = 0;
+       zend_off_t saved_pos = 0;
 
        zend_string* return_value = NULL;
 
diff --git a/ext/intl/tests/locale_bug72658.phpt b/ext/intl/tests/locale_bug72658.phpt
new file mode 100644 (file)
index 0000000..877f0b2
--- /dev/null
@@ -0,0 +1,18 @@
+--TEST--
+Bug #72658 Locale::lookup() / locale_lookup() hangs if no match found
+--SKIPIF--
+<?php if( !extension_loaded( 'intl' ) ) print 'skip'; ?>
+--FILE--
+<?php
+
+var_dump(
+       Locale::lookup(['en-Latn-US', 'sl', 'sl-IT'], 'en-US', true, 'de-DE'),
+       Locale::lookup(['en-Latn-US', 'sl', 'sl-IT'], 'en-US', false, 'de-DE')
+);
+
+?>
+==DONE==
+--EXPECT--
+string(5) "de-DE"
+string(5) "de-DE"
+==DONE==