summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-10-19 10:34:17 +0200
committerNikita Popov <nikita.ppv@gmail.com>2020-10-19 10:35:22 +0200
commit61b33e900cd92b89b02d7c6f9d85aa5888240de5 (patch)
tree554a7aa7ec34970d89a64c4d007bc28465120e7f
parentd0c2db4179d0b02ea9c6097752167ad61ee00651 (diff)
downloadphp-git-61b33e900cd92b89b02d7c6f9d85aa5888240de5.tar.gz
Add additional initialization checks to SplFileInfo
-rw-r--r--ext/spl/spl_directory.c15
-rw-r--r--ext/spl/tests/bug79987.phpt19
2 files changed, 34 insertions, 0 deletions
diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c
index a67b9efb03..3d0dae2435 100644
--- a/ext/spl/spl_directory.c
+++ b/ext/spl/spl_directory.c
@@ -899,6 +899,11 @@ PHP_METHOD(SplFileInfo, getFilename)
RETURN_THROWS();
}
+ if (!intern->file_name) {
+ zend_throw_error(NULL, "Object not initialized");
+ RETURN_THROWS();
+ }
+
spl_filesystem_object_get_path(intern, &path_len);
if (path_len && path_len < intern->file_name_len) {
@@ -937,6 +942,11 @@ PHP_METHOD(SplFileInfo, getExtension)
RETURN_THROWS();
}
+ if (!intern->file_name) {
+ zend_throw_error(NULL, "Object not initialized");
+ RETURN_THROWS();
+ }
+
spl_filesystem_object_get_path(intern, &path_len);
if (path_len && path_len < intern->file_name_len) {
@@ -1000,6 +1010,11 @@ PHP_METHOD(SplFileInfo, getBasename)
RETURN_THROWS();
}
+ if (!intern->file_name) {
+ zend_throw_error(NULL, "Object not initialized");
+ RETURN_THROWS();
+ }
+
spl_filesystem_object_get_path(intern, &path_len);
if (path_len && path_len < intern->file_name_len) {
diff --git a/ext/spl/tests/bug79987.phpt b/ext/spl/tests/bug79987.phpt
index bda5841ee7..b6ea8e2a9c 100644
--- a/ext/spl/tests/bug79987.phpt
+++ b/ext/spl/tests/bug79987.phpt
@@ -15,5 +15,24 @@ try {
} catch (Throwable $e) {
echo $e->getMessage() . "\n";
}
+try {
+ var_dump($x->getFilename());
+} catch (Throwable $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($x->getExtension());
+} catch (Throwable $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($x->getBasename());
+} catch (Throwable $e) {
+ echo $e->getMessage() . "\n";
+}
+?>
--EXPECT--
Object not initialized
+Object not initialized
+Object not initialized
+Object not initialized