1
0
mirror of https://github.com/php/php-src.git synced 2026-04-29 11:13:36 +02:00

Don't crash on uninitialized tidy object

"Uninitialized" here means that the object was created ordinarily
-- no constructor skipping involved. Most tidy methods seem to
handle this fine, but these three need to be guarded.
This commit is contained in:
Nikita Popov
2020-10-22 16:04:22 +02:00
parent d4200ba6cf
commit d4bf0799b8
2 changed files with 39 additions and 3 deletions
+29
View File
@@ -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
+10 -3
View File
@@ -66,6 +66,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; \
@@ -1474,7 +1481,7 @@ static PHP_FUNCTION(tidy_get_status)
Get the Detected HTML version for the specified document. */
static PHP_FUNCTION(tidy_get_html_ver)
{
TIDY_FETCH_OBJECT;
TIDY_FETCH_INITIALIZED_OBJECT;
RETURN_LONG(tidyDetectedHtmlVersion(obj->ptdoc->doc));
}
@@ -1484,7 +1491,7 @@ static PHP_FUNCTION(tidy_get_html_ver)
Indicates if the document is a XHTML document. */
static PHP_FUNCTION(tidy_is_xhtml)
{
TIDY_FETCH_OBJECT;
TIDY_FETCH_INITIALIZED_OBJECT;
RETURN_BOOL(tidyDetectedXhtml(obj->ptdoc->doc));
}
@@ -1494,7 +1501,7 @@ static PHP_FUNCTION(tidy_is_xhtml)
Indicates if the document is a generic (non HTML/XHTML) XML document. */
static PHP_FUNCTION(tidy_is_xml)
{
TIDY_FETCH_OBJECT;
TIDY_FETCH_INITIALIZED_OBJECT;
RETURN_BOOL(tidyDetectedGenericXml(obj->ptdoc->doc));
}