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:
@@ -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
@@ -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));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user