mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Merge branch 'PHP-7.4' into PHP-8.0
This commit is contained in:
commit
def8c8d174
5 changed files with 54 additions and 5 deletions
|
@ -1635,7 +1635,8 @@ static int phar_open_from_fp(php_stream* fp, char *fname, size_t fname_len, char
|
||||||
const char zip_magic[] = "PK\x03\x04";
|
const char zip_magic[] = "PK\x03\x04";
|
||||||
const char gz_magic[] = "\x1f\x8b\x08";
|
const char gz_magic[] = "\x1f\x8b\x08";
|
||||||
const char bz_magic[] = "BZh";
|
const char bz_magic[] = "BZh";
|
||||||
char *pos, test = '\0';
|
char *pos;
|
||||||
|
int recursion_count = 3; // arbitrary limit to avoid too deep or even infinite recursion
|
||||||
const int window_size = 1024;
|
const int window_size = 1024;
|
||||||
char buffer[1024 + sizeof(token)]; /* a 1024 byte window + the size of the halt_compiler token (moving window) */
|
char buffer[1024 + sizeof(token)]; /* a 1024 byte window + the size of the halt_compiler token (moving window) */
|
||||||
const zend_long readsize = sizeof(buffer) - sizeof(token);
|
const zend_long readsize = sizeof(buffer) - sizeof(token);
|
||||||
|
@ -1663,8 +1664,7 @@ static int phar_open_from_fp(php_stream* fp, char *fname, size_t fname_len, char
|
||||||
MAPPHAR_ALLOC_FAIL("internal corruption of phar \"%s\" (truncated entry)")
|
MAPPHAR_ALLOC_FAIL("internal corruption of phar \"%s\" (truncated entry)")
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!test) {
|
if (recursion_count) {
|
||||||
test = '\1';
|
|
||||||
pos = buffer+tokenlen;
|
pos = buffer+tokenlen;
|
||||||
if (!memcmp(pos, gz_magic, 3)) {
|
if (!memcmp(pos, gz_magic, 3)) {
|
||||||
char err = 0;
|
char err = 0;
|
||||||
|
@ -1724,7 +1724,10 @@ static int phar_open_from_fp(php_stream* fp, char *fname, size_t fname_len, char
|
||||||
compression = PHAR_FILE_COMPRESSED_GZ;
|
compression = PHAR_FILE_COMPRESSED_GZ;
|
||||||
|
|
||||||
/* now, start over */
|
/* now, start over */
|
||||||
test = '\0';
|
if (!--recursion_count) {
|
||||||
|
MAPPHAR_ALLOC_FAIL("unable to decompress gzipped phar archive \"%s\"");
|
||||||
|
break;
|
||||||
|
}
|
||||||
continue;
|
continue;
|
||||||
} else if (!memcmp(pos, bz_magic, 3)) {
|
} else if (!memcmp(pos, bz_magic, 3)) {
|
||||||
php_stream_filter *filter;
|
php_stream_filter *filter;
|
||||||
|
@ -1762,7 +1765,10 @@ static int phar_open_from_fp(php_stream* fp, char *fname, size_t fname_len, char
|
||||||
compression = PHAR_FILE_COMPRESSED_BZ2;
|
compression = PHAR_FILE_COMPRESSED_BZ2;
|
||||||
|
|
||||||
/* now, start over */
|
/* now, start over */
|
||||||
test = '\0';
|
if (!--recursion_count) {
|
||||||
|
MAPPHAR_ALLOC_FAIL("unable to decompress bzipped phar archive \"%s\"");
|
||||||
|
break;
|
||||||
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
BIN
ext/phar/tests/bug81726.gz
Normal file
BIN
ext/phar/tests/bug81726.gz
Normal file
Binary file not shown.
14
ext/phar/tests/bug81726.phpt
Normal file
14
ext/phar/tests/bug81726.phpt
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
--TEST--
|
||||||
|
Bug #81726 (phar wrapper: DOS when using quine gzip file)
|
||||||
|
--SKIPIF--
|
||||||
|
<?php
|
||||||
|
if (!extension_loaded("phar")) die("skip phar extension not available");
|
||||||
|
if (!extension_loaded("zlib")) die("skip zlib extension not available");
|
||||||
|
?>
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
var_dump(fopen("phar://" . __DIR__ . "/bug81726.gz", "r"));
|
||||||
|
?>
|
||||||
|
--EXPECTF--
|
||||||
|
Warning: fopen(phar://%s): failed to open stream: unable to decompress gzipped phar archive "%s" in %s on line %d
|
||||||
|
bool(false)
|
15
ext/standard/tests/bug81727.phpt
Normal file
15
ext/standard/tests/bug81727.phpt
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
--TEST--
|
||||||
|
Bug #81727: $_COOKIE name starting with ..Host/..Secure should be discarded
|
||||||
|
--COOKIE--
|
||||||
|
..Host-test=ignore; __Host-test=correct; . Secure-test=ignore; . Elephpant=Awesome;
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
var_dump($_COOKIE);
|
||||||
|
?>
|
||||||
|
--EXPECT--
|
||||||
|
array(2) {
|
||||||
|
["__Host-test"]=>
|
||||||
|
string(7) "correct"
|
||||||
|
["__Elephpant"]=>
|
||||||
|
string(7) "Awesome"
|
||||||
|
}
|
|
@ -104,6 +104,20 @@ PHPAPI void php_register_variable_ex(const char *var_name, zval *val, zval *trac
|
||||||
}
|
}
|
||||||
var_len = p - var;
|
var_len = p - var;
|
||||||
|
|
||||||
|
/* Discard variable if mangling made it start with __Host-, where pre-mangling it did not start with __Host- */
|
||||||
|
if (strncmp(var, "__Host-", sizeof("__Host-")-1) == 0 && strncmp(var_name, "__Host-", sizeof("__Host-")-1) != 0) {
|
||||||
|
zval_ptr_dtor_nogc(val);
|
||||||
|
free_alloca(var_orig, use_heap);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Discard variable if mangling made it start with __Secure-, where pre-mangling it did not start with __Secure- */
|
||||||
|
if (strncmp(var, "__Secure-", sizeof("__Secure-")-1) == 0 && strncmp(var_name, "__Secure-", sizeof("__Secure-")-1) != 0) {
|
||||||
|
zval_ptr_dtor_nogc(val);
|
||||||
|
free_alloca(var_orig, use_heap);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (var_len==0) { /* empty variable name, or variable name with a space in it */
|
if (var_len==0) { /* empty variable name, or variable name with a space in it */
|
||||||
zval_ptr_dtor_nogc(val);
|
zval_ptr_dtor_nogc(val);
|
||||||
free_alloca(var_orig, use_heap);
|
free_alloca(var_orig, use_heap);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue