Skip to content

Commit d8e7474

Browse files
committed
Fix incorrect exception type when handling with invalid characters
1 parent dc9f2f8 commit d8e7474

File tree

5 files changed

+32
-13
lines changed

5 files changed

+32
-13
lines changed

ext/dom/document.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -907,9 +907,6 @@ PHP_METHOD(DOM_Document, createAttributeNS)
907907
if (UNEXPECTED(errorcode != 0)) {
908908
goto error;
909909
}
910-
if (UNEXPECTED(xmlValidateName((xmlChar *) localname, 0) != 0)) {
911-
errorcode = INVALID_CHARACTER_ERR;
912-
}
913910
/* If prefix is "xml" and namespace is not the XML namespace, then throw a "NamespaceError" DOMException. */
914911
if (UNEXPECTED(!zend_string_equals_literal(uri, "http://www.w3.org/XML/1998/namespace") && xmlStrEqual(BAD_CAST prefix, BAD_CAST "xml"))) {
915912
errorcode = NAMESPACE_ERR;
@@ -926,7 +923,7 @@ PHP_METHOD(DOM_Document, createAttributeNS)
926923
goto error;
927924
}
928925

929-
nodep = (xmlNodePtr) xmlNewDocProp(docp, (xmlChar *) localname, NULL);
926+
nodep = (xmlNodePtr) xmlNewDocProp(docp, BAD_CAST localname, NULL);
930927
if (UNEXPECTED(nodep == NULL)) {
931928
php_dom_throw_error(INVALID_STATE_ERR, /* strict */ true);
932929
RETURN_THROWS();

ext/dom/php_dom.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1642,7 +1642,7 @@ int dom_check_qname(char *qname, char **localname, char **prefix, int uri_len, i
16421642

16431643
/* 1 */
16441644
if (xmlValidateQName((xmlChar *) qname, 0) != 0) {
1645-
return NAMESPACE_ERR;
1645+
return INVALID_CHARACTER_ERR;
16461646
}
16471647

16481648
/* 2 */
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
--TEST--
2+
DOMDocument::createAttributeNS() name validation
3+
--EXTENSIONS--
4+
dom
5+
--FILE--
6+
<?php
7+
$dom = new DOMDocument();
8+
$dom->loadXML("<container/>");
9+
try {
10+
$dom->createAttributeNs("urn:a", "a:b:c");
11+
} catch (DOMException $e) {
12+
echo $e->getMessage(), "\n";
13+
}
14+
try {
15+
$dom->createAttributeNs("urn:a", ":");
16+
} catch (DOMException $e) {
17+
echo $e->getMessage(), "\n";
18+
}
19+
?>
20+
--EXPECT--
21+
Invalid Character Error
22+
Invalid Character Error

ext/dom/tests/bug44648.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,5 @@ echo $doc->saveXML($root);
4141
Invalid Character Error
4242
Invalid Character Error
4343
Invalid Character Error
44-
Namespace Error
44+
Invalid Character Error
4545
<root/>

ext/dom/tests/dom_create_element.phpt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ try {
322322

323323
?>
324324
--EXPECT--
325-
1 DOMDocument::createElement('valid')
325+
1 DOMDocument::createElement('valid')
326326
valid
327327
2 DOMDocument::createElement('-invalid')
328328
Invalid Character Error
@@ -335,15 +335,15 @@ valid
335335
6 DOMDocument::createElementNS('http://valid.com', 'prefix:valid')
336336
valid
337337
7 DOMDocument::createElementNS('http://valid.com', '-invalid')
338-
Namespace Error
338+
Invalid Character Error
339339
8 DOMDocument::createElementNS('http://valid.com', 'prefix:-invalid')
340-
Namespace Error
340+
Invalid Character Error
341341
9 DOMDocument::createElementNS('', 'prefix:invalid')
342342
Namespace Error
343343
10 DOMDocument::createElementNS('http://valid.com', 'prefix:valid:invalid')
344-
Namespace Error
344+
Invalid Character Error
345345
11 DOMDocument::createElementNS('http://valid.com', '-prefix:valid')
346-
Namespace Error
346+
Invalid Character Error
347347
12 DOMDocument::createElementNS('-', 'prefix:valid')
348348
valid
349349
13 DOMElement::__construct('valid')
@@ -361,11 +361,11 @@ valid
361361
19 DOMElement::__construct('-invalid', '', 'http://valid.com')
362362
Invalid Character Error
363363
20 DOMElement::__construct('prefix:-invalid', '', 'http://valid.com')
364-
Namespace Error
364+
Invalid Character Error
365365
21 DOMElement::__construct('prefix:invalid', '', '')
366366
Namespace Error
367367
22 DOMElement::__construct('prefix:valid:invalid', '', 'http://valid.com')
368-
Namespace Error
368+
Invalid Character Error
369369
23 DOMElement::__construct('-prefix:valid', '', 'http://valid.com')
370370
Invalid Character Error
371371
24 DOMElement::__construct('prefix:valid', '', '-')

0 commit comments

Comments
 (0)