1
0
mirror of https://github.com/php/php-src.git synced 2026-04-28 18:53:33 +02:00

Merge branch 'PHP-7.3' into PHP-7.4

* PHP-7.3:
  Fix #77937: preg_match failed
This commit is contained in:
Christoph M. Becker
2019-06-11 08:44:54 +02:00
2 changed files with 46 additions and 0 deletions
+21
View File
@@ -4865,7 +4865,28 @@ PHP_FUNCTION(setlocale)
}
}
# ifndef PHP_WIN32
retval = php_my_setlocale(cat, loc ? ZSTR_VAL(loc) : NULL);
# else
if (loc) {
/* BC: don't try /^[a-z]{2}_[A-Z]{2}($|\..*)/ except for /^u[ks]_U[KS]$/ */
char *locp = ZSTR_VAL(loc);
if (ZSTR_LEN(loc) >= 5 && locp[2] == '_'
&& locp[0] >= 'a' && locp[0] <= 'z' && locp[1] >= 'a' && locp[1] <= 'z'
&& locp[3] >= 'A' && locp[3] <= 'Z' && locp[4] >= 'A' && locp[4] <= 'Z'
&& (locp[5] == '\0' || locp[5] == '.')
&& !(locp[0] == 'u' && (locp[1] == 'k' || locp[1] == 's')
&& locp[3] == 'U' && (locp[4] == 'K' || locp[4] == 'S')
&& locp[5] == '\0')
) {
retval = NULL;
} else {
retval = php_my_setlocale(cat, ZSTR_VAL(loc));
}
} else {
retval = php_my_setlocale(cat, NULL);
}
# endif
zend_update_current_locale();
if (retval) {
if (loc) {
@@ -0,0 +1,25 @@
--TEST--
Unix locale names are rejected on Windows, except for some special cases
--SKIPIF--
<?php
if (substr(PHP_OS, 0, 3) != 'WIN') die('skip this test is for Windows platforms only');
?>
--FILE--
<?php
var_dump(setlocale(LC_ALL, 'de_DE'));
var_dump(setlocale(LC_ALL, 'de_DE.UTF-8'));
// the following are supposed to be accepted
var_dump(setlocale(LC_ALL, 'uk_UK'));
var_dump(setlocale(LC_ALL, 'uk_US'));
var_dump(setlocale(LC_ALL, 'us_UK'));
var_dump(setlocale(LC_ALL, 'us_US'));
?>
===DONE===
--EXPECT--
bool(false)
bool(false)
string(27) "English_United Kingdom.1252"
string(26) "English_United States.1252"
string(27) "English_United Kingdom.1252"
string(26) "English_United States.1252"
===DONE===