PHP: compatibility with 8.0.0 RC1.

This closes #474 PR on GitHub.
This commit is contained in:
Valentin Bartenev 2020-10-06 18:12:05 +03:00
parent 6ec0ff3596
commit 2821b3347c
4 changed files with 40 additions and 10 deletions

View file

@ -88,6 +88,9 @@ static void nxt_php_set_options(nxt_task_t *task, nxt_conf_value_t *options,
int type); int type);
static nxt_int_t nxt_php_alter_option(nxt_str_t *name, nxt_str_t *value, static nxt_int_t nxt_php_alter_option(nxt_str_t *name, nxt_str_t *value,
int type); int type);
#ifdef NXT_PHP8
static void nxt_php_disable_functions(nxt_str_t *str);
#endif
static void nxt_php_disable(nxt_task_t *task, const char *type, static void nxt_php_disable(nxt_task_t *task, const char *type,
nxt_str_t *value, char **ptr, nxt_php_disable_t disable); nxt_str_t *value, char **ptr, nxt_php_disable_t disable);
@ -589,9 +592,13 @@ nxt_php_set_options(nxt_task_t *task, nxt_conf_value_t *options, int type)
} }
if (nxt_str_eq(&name, "disable_functions", 17)) { if (nxt_str_eq(&name, "disable_functions", 17)) {
#ifdef NXT_PHP8
nxt_php_disable_functions(&value);
#else
nxt_php_disable(task, "function", &value, nxt_php_disable(task, "function", &value,
&PG(disable_functions), &PG(disable_functions),
zend_disable_function); zend_disable_function);
#endif
continue; continue;
} }
@ -680,6 +687,29 @@ nxt_php_alter_option(nxt_str_t *name, nxt_str_t *value, int type)
#endif #endif
#ifdef NXT_PHP8
static void
nxt_php_disable_functions(nxt_str_t *str)
{
char *p;
p = nxt_malloc(str->length + 1);
if (nxt_slow_path(p == NULL)) {
return;
}
nxt_memcpy(p, str->start, str->length);
p[str->length] = '\0';
zend_disable_functions(p);
nxt_free(p);
}
#endif
static void static void
nxt_php_disable(nxt_task_t *task, const char *type, nxt_str_t *value, nxt_php_disable(nxt_task_t *task, const char *type, nxt_str_t *value,
char **ptr, nxt_php_disable_t disable) char **ptr, nxt_php_disable_t disable)

View file

@ -1,7 +1,7 @@
<?php <?php
header('Content-Length: 0'); header('Content-Length: 0');
header('X-Var-1: ' . $_GET['var1']); header('X-Var-1: ' . $_GET['var1']);
header('X-Var-2: ' . $_GET['var2'] . isset($_GET['var2'])); header('X-Var-2: ' . (isset($_GET['var2']) ? $_GET['var2'] : 'not set'));
header('X-Var-3: ' . $_GET['var3'] . isset($_GET['var3'])); header('X-Var-3: ' . (isset($_GET['var3']) ? $_GET['var3'] : 'not set'));
header('X-Var-4: ' . $_GET['var4'] . isset($_GET['var4'])); header('X-Var-4: ' . (isset($_GET['var4']) ? $_GET['var4'] : 'not set'));
?> ?>

View file

@ -1,6 +1,6 @@
<?php <?php
header('Content-Length: 0'); header('Content-Length: 0');
header('X-Var-1: ' . $_POST['var1']); header('X-Var-1: ' . $_POST['var1']);
header('X-Var-2: ' . $_POST['var2'] . isset($_POST['var2'])); header('X-Var-2: ' . (isset($_POST['var2']) ? $_POST['var2'] : 'not set'));
header('X-Var-3: ' . $_POST['var3'] . isset($_POST['var3'])); header('X-Var-3: ' . (isset($_POST['var3']) ? $_POST['var3'] : 'not set'));
?> ?>

View file

@ -198,9 +198,9 @@ class TestPHPApplication(TestApplicationPHP):
resp = self.get(url='/?var1=val1&var2=&var3') resp = self.get(url='/?var1=val1&var2=&var3')
assert resp['headers']['X-Var-1'] == 'val1', 'GET variables' assert resp['headers']['X-Var-1'] == 'val1', 'GET variables'
assert resp['headers']['X-Var-2'] == '1', 'GET variables 2' assert resp['headers']['X-Var-2'] == '', 'GET variables 2'
assert resp['headers']['X-Var-3'] == '1', 'GET variables 3' assert resp['headers']['X-Var-3'] == '', 'GET variables 3'
assert resp['headers']['X-Var-4'] == '', 'GET variables 4' assert resp['headers']['X-Var-4'] == 'not set', 'GET variables 4'
def test_php_application_post_variables(self): def test_php_application_post_variables(self):
self.load('post_variables') self.load('post_variables')
@ -214,8 +214,8 @@ class TestPHPApplication(TestApplicationPHP):
body='var1=val1&var2=', body='var1=val1&var2=',
) )
assert resp['headers']['X-Var-1'] == 'val1', 'POST variables' assert resp['headers']['X-Var-1'] == 'val1', 'POST variables'
assert resp['headers']['X-Var-2'] == '1', 'POST variables 2' assert resp['headers']['X-Var-2'] == '', 'POST variables 2'
assert resp['headers']['X-Var-3'] == '', 'POST variables 3' assert resp['headers']['X-Var-3'] == 'not set', 'POST variables 3'
def test_php_application_cookies(self): def test_php_application_cookies(self):
self.load('cookies') self.load('cookies')