]> granicus.if.org Git - php/commitdiff
Promote warnings in exif
authorNikita Popov <nikita.ppv@gmail.com>
Tue, 8 Sep 2020 09:50:25 +0000 (11:50 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Tue, 8 Sep 2020 09:51:19 +0000 (11:51 +0200)
The only thing that can promoted are the path-related checked.
Everything else is input dependent and error-suppressing these
functions is both the typical and the recommended usage.

ext/exif/exif.c
ext/exif/tests/filename_empty.phpt [new file with mode: 0644]

index b2852628badec1dee3fa875421fe41f430006f13..b47dea61096fca7d37ef48c2d21782e3c1f3e2cf 100644 (file)
@@ -4536,9 +4536,13 @@ PHP_FUNCTION(exif_read_data)
                }
 
                if (!Z_STRLEN_P(stream)) {
-                       exif_error_docref(NULL EXIFERR_CC, &ImageInfo, E_WARNING, "Filename cannot be empty");
+                       zend_argument_value_error(1, "cannot be empty");
+                       RETURN_THROWS();
+               }
 
-                       RETURN_FALSE;
+               if (CHECK_NULL_PATH(Z_STRVAL_P(stream), Z_STRLEN_P(stream))) {
+                       zend_argument_type_error(1, "cannot contain any null-bytes");
+                       RETURN_THROWS();
                }
 
                ret = exif_read_from_file(&ImageInfo, Z_STRVAL_P(stream), read_thumbnail, read_all);
@@ -4709,9 +4713,13 @@ PHP_FUNCTION(exif_thumbnail)
                }
 
                if (!Z_STRLEN_P(stream)) {
-                       exif_error_docref(NULL EXIFERR_CC, &ImageInfo, E_WARNING, "Filename cannot be empty");
+                       zend_argument_value_error(1, "cannot be empty");
+                       RETURN_THROWS();
+               }
 
-                       RETURN_FALSE;
+               if (CHECK_NULL_PATH(Z_STRVAL_P(stream), Z_STRLEN_P(stream))) {
+                       zend_argument_type_error(1, "cannot contain any null-bytes");
+                       RETURN_THROWS();
                }
 
                ret = exif_read_from_file(&ImageInfo, Z_STRVAL_P(stream), 1, 0);
diff --git a/ext/exif/tests/filename_empty.phpt b/ext/exif/tests/filename_empty.phpt
new file mode 100644 (file)
index 0000000..7896c87
--- /dev/null
@@ -0,0 +1,35 @@
+--TEST--
+Passing empty filename to exif_read_data() and exif_thumnail()
+--FILE--
+<?php
+
+try {
+    exif_read_data("");
+} catch (ValueError $e) {
+    echo $e->getMessage(), "\n";
+}
+
+try {
+    exif_thumbnail("");
+} catch (ValueError $e) {
+    echo $e->getMessage(), "\n";
+}
+
+try {
+    exif_read_data("foo\0bar");
+} catch (TypeError $e) {
+    echo $e->getMessage(), "\n";
+}
+
+try {
+    exif_thumbnail("foo\0bar");
+} catch (TypeError $e) {
+    echo $e->getMessage(), "\n";
+}
+
+?>
+--EXPECT--
+exif_read_data(): Argument #1 ($filename) cannot be empty
+exif_thumbnail(): Argument #1 ($filename) cannot be empty
+exif_read_data(): Argument #1 ($filename) cannot contain any null-bytes
+exif_thumbnail(): Argument #1 ($filename) cannot contain any null-bytes