@@ -1435,14 +1435,15 @@ static zend_string* lookup_loc_range(const char* loc_range, HashTable* hash_arr,
14351435 zend_argument_value_error (2 , " must not contain any null bytes" );
14361436 LOOKUP_CLEAN_RETURN (NULL );
14371437 }
1438- cur_arr[cur_arr_len*2 ] = estrndup (Z_STRVAL_P (ele_value), Z_STRLEN_P (ele_value));
1439- result = strToMatch (Z_STRVAL_P (ele_value), cur_arr[cur_arr_len*2 ]);
1438+ i = cur_arr_len*2 ;
1439+ cur_arr[i] = estrndup (Z_STRVAL_P (ele_value), Z_STRLEN_P (ele_value));
1440+ cur_arr_len++;
1441+ result = strToMatch (Z_STRVAL_P (ele_value), cur_arr[i]);
14401442 if (result == 0 ) {
14411443 intl_error_set (NULL , U_ILLEGAL_ARGUMENT_ERROR , " unable to canonicalize lang_tag" );
14421444 LOOKUP_CLEAN_RETURN (NULL );
14431445 }
1444- cur_arr[cur_arr_len*2 +1 ] = Z_STRVAL_P (ele_value);
1445- cur_arr_len++ ;
1446+ cur_arr[i+1 ] = Z_STRVAL_P (ele_value);
14461447 } ZEND_HASH_FOREACH_END (); /* end of for */
14471448
14481449 /* Canonicalize array elements */
@@ -1562,6 +1563,15 @@ U_CFUNC PHP_FUNCTION(locale_lookup)
15621563 }
15631564
15641565 result_str = lookup_loc_range (loc_range, hash_arr, boolCanonical);
1566+ if (EG (exception)) {
1567+ RETURN_THROWS ();
1568+ }
1569+ if (U_FAILURE (intl_error_get_code (NULL ))) {
1570+ if (result_str) {
1571+ zend_string_release_ex (result_str, 0 );
1572+ }
1573+ RETURN_NULL ();
1574+ }
15651575 if (result_str == NULL || ZSTR_VAL (result_str)[0 ] == ' \0 ' ) {
15661576 if ( fallback_loc_str ) {
15671577 result_str = zend_string_copy (fallback_loc_str);
0 commit comments