diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2020-10-22 16:05:57 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-10-22 16:05:57 +0200 |
commit | 6de6f2a4e9e54ce31030973dd11cc0cdaaa5c6bb (patch) | |
tree | acf0e720a898014bc9bffa4129ee6358ee24d0d0 | |
parent | bfe7a1168aeb0b648556dc1e2fc26196412381ab (diff) | |
parent | 85d9a1ca6ef00e8de77801bcadf3468aada16b90 (diff) | |
download | php-git-6de6f2a4e9e54ce31030973dd11cc0cdaaa5c6bb.tar.gz |
Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
Don't crash on uninitialized tidy object
-rw-r--r-- | ext/tidy/tests/uninitialized.phpt | 29 | ||||
-rw-r--r-- | ext/tidy/tidy.c | 13 |
2 files changed, 39 insertions, 3 deletions
diff --git a/ext/tidy/tests/uninitialized.phpt b/ext/tidy/tests/uninitialized.phpt new file mode 100644 index 0000000000..3533f0d345 --- /dev/null +++ b/ext/tidy/tests/uninitialized.phpt @@ -0,0 +1,29 @@ +--TEST-- +Operations on uninitialized tidy object +--SKIPIF-- +<?php if (!extension_loaded("tidy")) print "skip"; ?> +--FILE-- +<?php + +$tidy = new tidy; +try { + var_dump($tidy->getHtmlVer()); +} catch (Error $e) { + echo $e->getMessage(), "\n"; +} +try { + var_dump($tidy->isXhtml()); +} catch (Error $e) { + echo $e->getMessage(), "\n"; +} +try { + var_dump($tidy->isXml()); +} catch (Error $e) { + echo $e->getMessage(), "\n"; +} + +?> +--EXPECT-- +tidy object is not initialized +tidy object is not initialized +tidy object is not initialized diff --git a/ext/tidy/tidy.c b/ext/tidy/tidy.c index 0efa594b69..8d87bb980c 100644 --- a/ext/tidy/tidy.c +++ b/ext/tidy/tidy.c @@ -59,6 +59,13 @@ } \ obj = Z_TIDY_P(object); \ +#define TIDY_FETCH_INITIALIZED_OBJECT \ + TIDY_FETCH_OBJECT; \ + if (!obj->ptdoc->initialized) { \ + zend_throw_error(NULL, "tidy object is not initialized"); \ + return; \ + } + #define TIDY_FETCH_ONLY_OBJECT \ PHPTidyObj *obj; \ TIDY_SET_CONTEXT; \ @@ -1229,7 +1236,7 @@ PHP_FUNCTION(tidy_get_status) /* {{{ Get the Detected HTML version for the specified document. */ PHP_FUNCTION(tidy_get_html_ver) { - TIDY_FETCH_OBJECT; + TIDY_FETCH_INITIALIZED_OBJECT; RETURN_LONG(tidyDetectedHtmlVersion(obj->ptdoc->doc)); } @@ -1238,7 +1245,7 @@ PHP_FUNCTION(tidy_get_html_ver) /* {{{ Indicates if the document is a XHTML document. */ PHP_FUNCTION(tidy_is_xhtml) { - TIDY_FETCH_OBJECT; + TIDY_FETCH_INITIALIZED_OBJECT; RETURN_BOOL(tidyDetectedXhtml(obj->ptdoc->doc)); } @@ -1247,7 +1254,7 @@ PHP_FUNCTION(tidy_is_xhtml) /* {{{ Indicates if the document is a generic (non HTML/XHTML) XML document. */ PHP_FUNCTION(tidy_is_xml) { - TIDY_FETCH_OBJECT; + TIDY_FETCH_INITIALIZED_OBJECT; RETURN_BOOL(tidyDetectedGenericXml(obj->ptdoc->doc)); } |