Merge remote-tracking branch 'origin/rosa2021.15' into rosa2023.1

This commit is contained in:
Mikhail Novosyolov 2023-10-11 12:59:33 +03:00
commit d85b0b2b67
2 changed files with 255 additions and 0 deletions

View file

@ -0,0 +1,252 @@
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c
index 33dfea0..057fe96 100644
--- a/Zend/zend_builtin_functions.c
+++ b/Zend/zend_builtin_functions.c
@@ -1636,7 +1636,9 @@ ZEND_FUNCTION(set_error_handler)
zend_string *error_handler_name = zend_get_callable_name(error_handler);
zend_error(E_WARNING, "%s() expects the argument (%s) to be a valid callback",
get_active_function_name(), error_handler_name?ZSTR_VAL(error_handler_name):"unknown");
- zend_string_release_ex(error_handler_name, 0);
+ if (error_handler_name) {
+ zend_string_release_ex(error_handler_name, 0);
+ }
return;
}
}
@@ -1703,7 +1705,9 @@ ZEND_FUNCTION(set_exception_handler)
zend_string *exception_handler_name = zend_get_callable_name(exception_handler);
zend_error(E_WARNING, "%s() expects the argument (%s) to be a valid callback",
get_active_function_name(), exception_handler_name?ZSTR_VAL(exception_handler_name):"unknown");
- zend_string_release_ex(exception_handler_name, 0);
+ if (exception_handler_name) {
+ zend_string_release_ex(exception_handler_name, 0);
+ }
return;
}
}
diff --git a/Zend/zend_exceptions.c b/Zend/zend_exceptions.c
index 2d52e4e..a1c1022 100644
--- a/Zend/zend_exceptions.c
+++ b/Zend/zend_exceptions.c
@@ -1040,8 +1040,12 @@ ZEND_API ZEND_COLD void zend_exception_error(zend_object *ex, int severity) /* {
zend_error_va(severity, (file && ZSTR_LEN(file) > 0) ? ZSTR_VAL(file) : NULL, line,
"Uncaught %s\n thrown", ZSTR_VAL(str));
- zend_string_release_ex(str, 0);
- zend_string_release_ex(file, 0);
+ if (str) {
+ zend_string_release_ex(str, 0);
+ }
+ if (file) {
+ zend_string_release_ex(file, 0);
+ }
} else {
zend_error(severity, "Uncaught exception '%s'", ZSTR_VAL(ce_exception->name));
}
diff --git a/Zend/zend_multibyte.c b/Zend/zend_multibyte.c
index 956ffbb..0c7c65e 100644
--- a/Zend/zend_multibyte.c
+++ b/Zend/zend_multibyte.c
@@ -115,6 +115,9 @@ ZEND_API int zend_multibyte_set_functions(const zend_multibyte_functions *functi
*/
{
const char *value = zend_ini_string("zend.script_encoding", sizeof("zend.script_encoding") - 1, 0);
+ if (!value) {
+ return FAILURE;
+ }
zend_multibyte_set_script_encoding_by_string(value, strlen(value));
}
return SUCCESS;
diff --git a/ext/dom/entity.c b/ext/dom/entity.c
index b412550..34b83ee 100644
--- a/ext/dom/entity.c
+++ b/ext/dom/entity.c
@@ -106,6 +106,9 @@ int dom_entity_notation_name_read(dom_object *obj, zval *retval)
ZVAL_NULL(retval);
} else {
content = (char *) xmlNodeGetContent((xmlNodePtr) nodep);
+ if (!content) {
+ return FAILURE;
+ }
ZVAL_STRING(retval, content);
xmlFree(content);
}
diff --git a/ext/phar/phar.c b/ext/phar/phar.c
index ecab916..06bb697 100644
--- a/ext/phar/phar.c
+++ b/ext/phar/phar.c
@@ -2751,8 +2751,10 @@ int phar_flush(phar_archive_data *phar, char *user_stub, zend_long len, int conv
newentry = phar_open_jit(phar, entry, error);
if (!newentry) {
/* major problem re-opening, so we ignore this file and the error */
- efree(*error);
- *error = NULL;
+ if (error) {
+ efree(*error);
+ *error = NULL;
+ }
continue;
}
entry = newentry;
diff --git a/ext/phar/tar.c b/ext/phar/tar.c
index 03e6dd4..52b5c5d 100644
--- a/ext/phar/tar.c
+++ b/ext/phar/tar.c
@@ -899,7 +899,7 @@ int phar_tar_setmetadata(zval *metadata, phar_entry_info *entry, char **error) /
spprintf(error, 0, "phar error: unable to create temporary file");
return -1;
}
- if (ZSTR_LEN(entry->metadata_str.s) != php_stream_write(entry->fp, ZSTR_VAL(entry->metadata_str.s), ZSTR_LEN(entry->metadata_str.s))) {
+ if (entry->metadata_str.s && ZSTR_LEN(entry->metadata_str.s) != php_stream_write(entry->fp, ZSTR_VAL(entry->metadata_str.s), ZSTR_LEN(entry->metadata_str.s))) {
spprintf(error, 0, "phar tar error: unable to write metadata to magic metadata file \"%s\"", entry->filename);
zend_hash_str_del(&(entry->phar->manifest), entry->filename, entry->filename_len);
return ZEND_HASH_APPLY_STOP;
diff --git a/ext/sqlite3/sqlite3.c b/ext/sqlite3/sqlite3.c
index f4d8066..9386c05 100644
--- a/ext/sqlite3/sqlite3.c
+++ b/ext/sqlite3/sqlite3.c
@@ -877,7 +877,9 @@ static int sqlite3_do_callback(struct php_sqlite3_fci *fc, zval *cb, int argc, s
if (agg_context && !Z_ISUNDEF(agg_context->zval_context)) {
zval_ptr_dtor(&agg_context->zval_context);
}
- ZVAL_COPY_VALUE(&agg_context->zval_context, &retval);
+ if (agg_context) {
+ ZVAL_COPY_VALUE(&agg_context->zval_context, &retval);
+ }
ZVAL_UNDEF(&retval);
}
diff --git a/ext/standard/filters.c b/ext/standard/filters.c
index 018270c..6acce21 100644
--- a/ext/standard/filters.c
+++ b/ext/standard/filters.c
@@ -766,7 +766,7 @@ static void php_conv_qprint_encode_dtor(php_conv_qprint_encode *inst)
}
#define NEXT_CHAR(ps, icnt, lb_ptr, lb_cnt, lbchars) \
- ((lb_ptr) < (lb_cnt) ? (lbchars)[(lb_ptr)] : *(ps))
+ ((lb_ptr) < (lb_cnt) && (lbchars) ? (lbchars)[(lb_ptr)] : ((ps) ? *(ps) : '\0'))
#define CONSUME_CHAR(ps, icnt, lb_ptr, lb_cnt) \
if ((lb_ptr) < (lb_cnt)) { \
diff --git a/ext/standard/var.c b/ext/standard/var.c
index 37a68bb..ba68cf3 100644
--- a/ext/standard/var.c
+++ b/ext/standard/var.c
@@ -1070,8 +1070,10 @@ again:
/* Mark this value in the var_hash, to avoid creating references to it. */
zval *var_idx = zend_hash_index_find(&var_hash->ht,
(zend_ulong) (zend_uintptr_t) Z_COUNTED_P(struc));
- ZVAL_LONG(var_idx, -1);
- smart_str_appendl(buf, "N;", 2);
+ if (var_idx) {
+ ZVAL_LONG(var_idx, -1);
+ smart_str_appendl(buf, "N;", 2);
+ }
}
if (serialized_data) {
efree(serialized_data);
diff --git a/sapi/fpm/fpm/fpm_conf.c b/sapi/fpm/fpm/fpm_conf.c
index 7a05286..378c585 100644
--- a/sapi/fpm/fpm/fpm_conf.c
+++ b/sapi/fpm/fpm/fpm_conf.c
@@ -720,8 +720,8 @@ static int fpm_evaluate_full_path(char **path, struct fpm_worker_pool_s *wp, cha
}
if (strlen(*path) > strlen("$prefix")) {
- free(*path);
tmp = strdup((*path) + strlen("$prefix"));
+ free(*path);
*path = tmp;
} else {
free(*path);
diff --git a/sapi/fpm/fpm/zlog.c b/sapi/fpm/fpm/zlog.c
index 4808447..849370c 100644
--- a/sapi/fpm/fpm/zlog.c
+++ b/sapi/fpm/fpm/zlog.c
@@ -348,7 +348,7 @@ static ssize_t zlog_stream_direct_write(
static inline ssize_t zlog_stream_unbuffered_write(
struct zlog_stream *stream, const char *buf, size_t len) /* {{{ */
{
- const char *append;
+ const char *append = NULL;
size_t append_len = 0, required_len, reserved_len;
ssize_t written;
@@ -637,10 +637,10 @@ zlog_bool zlog_stream_set_msg_suffix(
if (suffix != NULL) {
stream->msg_suffix_len = strlen(suffix);
len = stream->msg_suffix_len + 1;
- stream->msg_suffix = malloc(len);
if (stream->msg_suffix != NULL) {
free(stream->msg_suffix);
}
+ stream->msg_suffix = malloc(len);
if (stream->msg_suffix == NULL) {
return ZLOG_FALSE;
}
@@ -652,7 +652,7 @@ zlog_bool zlog_stream_set_msg_suffix(
len = stream->msg_final_suffix_len + 1;
stream->msg_final_suffix = malloc(len);
if (stream->msg_final_suffix != NULL) {
- free(stream->msg_suffix);
+ free(stream->msg_final_suffix);
}
if (stream->msg_final_suffix == NULL) {
return ZLOG_FALSE;
diff --git a/sapi/phpdbg/phpdbg_prompt.c b/sapi/phpdbg/phpdbg_prompt.c
index 6b0de5c..0764789 100644
--- a/sapi/phpdbg/phpdbg_prompt.c
+++ b/sapi/phpdbg/phpdbg_prompt.c
@@ -544,6 +544,9 @@ int phpdbg_compile_stdin(zend_string *code) {
/* remove trailing data after zero byte, used for avoiding conflicts in eval()'ed code snippets */
zend_string *source_path = strpprintf(0, "Standard input code%c%p", 0, PHPDBG_G(ops)->opcodes);
phpdbg_file_source *data = zend_hash_find_ptr(&PHPDBG_G(file_sources), source_path);
+ if (!data) {
+ return FAILURE;
+ }
dtor_func_t dtor = PHPDBG_G(file_sources).pDestructor;
PHPDBG_G(file_sources).pDestructor = NULL;
zend_hash_del(&PHPDBG_G(file_sources), source_path);
@@ -1349,7 +1352,7 @@ PHPDBG_API const char *phpdbg_load_module_or_extension(char **path, char **name)
module_entry->handle = handle;
if ((module_entry = zend_register_module_ex(module_entry)) == NULL) {
- phpdbg_error("dl", "type=\"registerfailure\" module=\"%s\"", "Unable to register module %s", module_entry->name);
+ phpdbg_error("dl", "type=\"registerfailure\" module=\"%s\"", "Unable to register module %s", "Unknown module");
goto quit;
}
diff --git a/main/streams/plain_wrapper.c b/main/streams/plain_wrapper.c
index 4d10e68..1acfec6 100644
--- a/main/streams/plain_wrapper.c
+++ b/main/streams/plain_wrapper.c
@@ -926,6 +926,7 @@ static int php_stdiop_set_option(php_stream *stream, int option, int value, void
}
}
+ return PHP_STREAM_OPTION_RETURN_NOTIMPL;
#ifdef PHP_WIN32
case PHP_STREAM_OPTION_PIPE_BLOCKING:
data->is_pipe_blocking = value;
diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c
index b0de6e4..5e3adec 100644
--- a/ext/phar/phar_object.c
+++ b/ext/phar/phar_object.c
@@ -3484,12 +3484,10 @@ PHP_METHOD(Phar, copy)
RETURN_FALSE;
}
- if (zend_hash_str_exists(&phar_obj->archive->manifest, newfile, (uint32_t) newfile_len)) {
- if (NULL != (temp = zend_hash_str_find_ptr(&phar_obj->archive->manifest, newfile, (uint32_t) newfile_len)) || !temp->is_deleted) {
- zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0,
- "file \"%s\" cannot be copied to file \"%s\", file must not already exist in phar %s", oldfile, newfile, phar_obj->archive->fname);
- RETURN_FALSE;
- }
+ if (!zend_hash_str_exists(&phar_obj->archive->manifest, oldfile, (uint32_t) oldfile_len) || NULL == (oldentry = zend_hash_str_find_ptr(&phar_obj->archive->manifest, oldfile, (uint32_t) oldfile_len)) || oldentry->is_deleted) {
+ zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0,
+ "file \"%s\" cannot be copied to file \"%s\", file must not already exist in phar %s", oldfile, newfile, phar_obj->archive->fname);
+ RETURN_FALSE;
}
tmp_len = newfile_len;

View file

@ -88,6 +88,8 @@ Patch124: 0060-Fix-regression-introduced-by-fixing-bug-81726.patch
Patch125: 0061-Fix-81727-Don-t-mangle-HTTP-variable-names-that-clas.patch
# CVE-2022-37454
Patch126: 0062-Fix-bug-81738-buffer-overflow-in-hash_update-on-long.patch
# Sauce fixes
Patch127: php-7.4.30-svace-fixes.patch
Patch200: fix-include-e2k.patch
BuildRequires: autoconf
@ -1284,6 +1286,7 @@ fi
%patch124 -p1
%patch125 -p1
%patch126 -p1
%patch127 -p1
%patch200 -p1
cp %{SOURCE2} maxlifetime