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 @@ -2654,16 +2654,14 @@ zend_throw_exception_ex(phar_ce_PharException, 0, "phar \"%s\" is persistent, unable to copy on write", phar_obj->archive->fname); return; } - if (zend_hash_str_exists(&phar_obj->archive->manifest, fname, (uint32_t) fname_len)) { - if (NULL != (entry = zend_hash_str_find_ptr(&phar_obj->archive->manifest, fname, (uint32_t) fname_len))) { - if (entry->is_deleted) { - /* entry is deleted, but has not been flushed to disk yet */ - RETURN_TRUE; - } else { - entry->is_deleted = 1; - entry->is_modified = 1; - phar_obj->archive->is_modified = 1; - } + if (NULL != (entry = zend_hash_str_find_ptr(&phar_obj->archive->manifest, fname, (uint32_t) fname_len))) { + if (entry->is_deleted) { + /* entry is deleted, but has not been flushed to disk yet */ + RETURN_TRUE; + } else { + entry->is_deleted = 1; + entry->is_modified = 1; + phar_obj->archive->is_modified = 1; } } else { zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, "Entry %s does not exist and cannot be deleted", fname); @@ -3478,18 +3476,16 @@ 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) { + if (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 does not exist in %s", oldfile, newfile, phar_obj->archive->fname); 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 (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; } tmp_len = newfile_len; diff --git a/ext/enchant/enchant.c b/ext/enchant/enchant.c index 6ce9d4b..d8e26f6 100644 --- a/ext/enchant/enchant.c +++ b/ext/enchant/enchant.c @@ -269,7 +269,9 @@ static void php_enchant_dict_free(zend_resource *rsrc) /* {{{ */ enchant_broker_free_dict(pbroker->pbroker, pdict->pdict); } - pbroker->dict[pdict->id] = NULL; + if (pbroker->dict) + pbroker->dict[pdict->id] = NULL; + efree(pdict); zend_list_delete(pbroker->rsrc); } diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c b/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c index ac476b3..9b51dd0 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c @@ -682,7 +682,7 @@ mbfl_filt_conv_jis2004_flush(mbfl_convert_filter *filter) k = filter->cache; filter->cache = 0; - if (filter->status == 1 && k >= 0 && k <= jisx0213_u2_tbl_len) { + if (filter->status == 1 && k >= 0 && k < jisx0213_u2_tbl_len) { s1 = jisx0213_u2_fb_tbl[k]; if (filter->to->no_encoding == mbfl_no_encoding_sjis2004) { diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c index e0cf63d..d30d9e1 100644 --- a/ext/soap/php_encoding.c +++ b/ext/soap/php_encoding.c @@ -907,7 +907,7 @@ static xmlNodePtr to_xml_string(encodeTypePtr type, zval *data, int style, xmlNo xmlAddChild(ret, text); efree(str); - if (style == SOAP_ENCODED) { + if (style == SOAP_ENCODED && type) { set_ns_and_type(ret, type); } return ret; diff --git a/ext/mysqlnd/mysqlnd_result.c b/ext/mysqlnd/mysqlnd_result.c index 4dcaf12..96e516b 100644 --- a/ext/mysqlnd/mysqlnd_result.c +++ b/ext/mysqlnd/mysqlnd_result.c @@ -1396,8 +1396,8 @@ MYSQLND_METHOD(mysqlnd_res, store_result_fetch_data)(MYSQLND_CONN_DATA * const c UPSERT_STATUS_GET_SERVER_STATUS(conn->upsert_status)); free_end: PACKET_FREE(&row_packet); + DBG_INF_FMT("rows=%llu", (unsigned long long)set->row_count); end: - DBG_INF_FMT("rows=%llu", (unsigned long long)result->stored_data->row_count); DBG_RETURN(ret); } /* }}} */