From f4b0b32e2dc2c1705c587a52bc5d242a33918ac9 Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Tue, 20 Oct 2020 12:31:58 +0200 Subject: [PATCH] Raise E_WARNING on PHP related errors If Zip operations fails due to PHP error conditions before libzip even has been called, there is no meaningful indication what failed; the functions just return false, and the Zip status indicated that no error did occur. Therefore we raise `E_WARNING` in these cases. Closes GH-6356. --- ext/zip/php_zip.c | 4 ++++ ext/zip/tests/bug64342_0.phpt | 2 ++ ext/zip/tests/bug64342_1-mb.phpt | 3 ++- ext/zip/tests/bug64342_1.phpt | 3 ++- 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/ext/zip/php_zip.c b/ext/zip/php_zip.c index 96baabacd4..58707d6f95 100644 --- a/ext/zip/php_zip.c +++ b/ext/zip/php_zip.c @@ -288,11 +288,13 @@ static int php_zip_add_file(ze_zip_object *obj, const char *filename, size_t fil } if (!expand_filepath(filename, resolved_path)) { + php_error_docref(NULL, E_WARNING, "No such file or directory"); return -1; } php_stat(resolved_path, strlen(resolved_path), FS_EXISTS, &exists_flag); if (Z_TYPE(exists_flag) == IS_FALSE) { + php_error_docref(NULL, E_WARNING, "No such file or directory"); return -1; } @@ -1163,6 +1165,7 @@ PHP_FUNCTION(zip_open) } if(!expand_filepath(ZSTR_VAL(filename), resolved_path)) { + php_error_docref(NULL, E_WARNING, "No such file or directory"); RETURN_FALSE; } @@ -1444,6 +1447,7 @@ PHP_METHOD(ZipArchive, open) } if (!(resolved_path = expand_filepath(ZSTR_VAL(filename), NULL))) { + php_error_docref(NULL, E_WARNING, "No such file or directory"); RETURN_FALSE; } diff --git a/ext/zip/tests/bug64342_0.phpt b/ext/zip/tests/bug64342_0.phpt index 43f60f5d7c..751fb9c4ba 100644 --- a/ext/zip/tests/bug64342_0.phpt +++ b/ext/zip/tests/bug64342_0.phpt @@ -38,6 +38,8 @@ DONE ?> --EXPECTF-- %s.txt + +Warning: ZipArchive::addFile(): No such file or directory in %s on line %d add failed close ok DONE diff --git a/ext/zip/tests/bug64342_1-mb.phpt b/ext/zip/tests/bug64342_1-mb.phpt index 4884c9fe5f..9efd046315 100644 --- a/ext/zip/tests/bug64342_1-mb.phpt +++ b/ext/zip/tests/bug64342_1-mb.phpt @@ -37,6 +37,7 @@ if ($zip->status == ZIPARCHIVE::ER_OK) { } @unlink($file); ?> ---EXPECT-- +--EXPECTF-- +Warning: ZipArchive::addFile(): No such file or directory in %s on line %d failed OK diff --git a/ext/zip/tests/bug64342_1.phpt b/ext/zip/tests/bug64342_1.phpt index 6b923d3ef1..1fff3da26d 100644 --- a/ext/zip/tests/bug64342_1.phpt +++ b/ext/zip/tests/bug64342_1.phpt @@ -37,6 +37,7 @@ if ($zip->status == ZIPARCHIVE::ER_OK) { } @unlink($file); ?> ---EXPECT-- +--EXPECTF-- +Warning: ZipArchive::addFile(): No such file or directory in %s on line %d failed OK -- 2.40.0