diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2020-09-08 11:50:25 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-09-08 11:51:19 +0200 |
commit | 259af931e62e11dbc040adc30f8f00dbc1e3f2d3 (patch) | |
tree | 28279732ccde6ff6c51569a2522272b93eaaf713 /ext/exif | |
parent | 382cb2e77953c4f7931eb5b0fe7cf0b15d27fd0f (diff) | |
download | php-git-259af931e62e11dbc040adc30f8f00dbc1e3f2d3.tar.gz |
Promote warnings in exif
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.
Diffstat (limited to 'ext/exif')
-rw-r--r-- | ext/exif/exif.c | 16 | ||||
-rw-r--r-- | ext/exif/tests/filename_empty.phpt | 35 |
2 files changed, 47 insertions, 4 deletions
diff --git a/ext/exif/exif.c b/ext/exif/exif.c index b2852628ba..b47dea6109 100644 --- a/ext/exif/exif.c +++ b/ext/exif/exif.c @@ -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 index 0000000000..7896c87fbb --- /dev/null +++ b/ext/exif/tests/filename_empty.phpt @@ -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 |