summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-10-22 16:05:57 +0200
committerNikita Popov <nikita.ppv@gmail.com>2020-10-22 16:05:57 +0200
commit6de6f2a4e9e54ce31030973dd11cc0cdaaa5c6bb (patch)
treeacf0e720a898014bc9bffa4129ee6358ee24d0d0
parentbfe7a1168aeb0b648556dc1e2fc26196412381ab (diff)
parent85d9a1ca6ef00e8de77801bcadf3468aada16b90 (diff)
downloadphp-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.phpt29
-rw-r--r--ext/tidy/tidy.c13
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));
}