From 61b33e900cd92b89b02d7c6f9d85aa5888240de5 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Mon, 19 Oct 2020 10:34:17 +0200 Subject: [PATCH] Add additional initialization checks to SplFileInfo --- ext/spl/spl_directory.c | 15 +++++++++++++++ ext/spl/tests/bug79987.phpt | 19 +++++++++++++++++++ 2 files changed, 34 insertions(+) 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 -- 2.50.1