You are viewing a plain text version of this content. The canonical link for it is here.
Posted to j-dev@xerces.apache.org by "George Cristian Bina (JIRA)" <xe...@xml.apache.org> on 2006/10/10 15:48:19 UTC
[jira] Created: (XERCESJ-1203) NPE in XMLDTDProcessor
NPE in XMLDTDProcessor
----------------------
Key: XERCESJ-1203
URL: http://issues.apache.org/jira/browse/XERCESJ-1203
Project: Xerces2-J
Issue Type: Bug
Components: DTD
Affects Versions: 2.8.1
Reporter: George Cristian Bina
When checking for undeclared elements is enabled Xerces throws a NPE in XMLDTDProcessor in private void checkDeclaredElements(DTDGrammar grammar, int elementIndex, int contentSpecIndex, XMLContentSpec contentSpec). That's because int[] contentSpec.otherValue can be null and the current code tries to get the value at index 0. A possible fix is to access otherValue only when we know it exists, change
else {
// It's not a leaf, so we have to recurse its left and maybe right
// nodes. Save both values before we recurse and trash the node.
final int leftNode = ((int[])contentSpec.value)[0];
final int rightNode = ((int[])contentSpec.otherValue)[0];
if ((contentSpec.type == XMLContentSpec.CONTENTSPECNODE_CHOICE)
|| (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_SEQ)) {
// Recurse on both children.
checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
checkDeclaredElements(grammar, elementIndex, rightNode, contentSpec);
}
else if (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_MORE
|| contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_ONE
|| contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ONE_OR_MORE) {
checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
}
}
to
else {
// It's not a leaf, so we have to recurse its left and maybe right
// nodes. Save both values before we recurse and trash the node.
if ((contentSpec.type == XMLContentSpec.CONTENTSPECNODE_CHOICE)
|| (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_SEQ)) {
// Recurse on both children.
final int leftNode = ((int[])contentSpec.value)[0];
final int rightNode = ((int[])contentSpec.otherValue)[0];
checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
checkDeclaredElements(grammar, elementIndex, rightNode, contentSpec);
}
else if (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_MORE
|| contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_ONE
|| contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ONE_OR_MORE) {
final int leftNode = ((int[])contentSpec.value)[0];
checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
}
}
Thanks,
George
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org
[jira] Assigned: (XERCESJ-1203) NPE in XMLDTDProcessor
Posted by "Michael Glavassevich (JIRA)" <xe...@xml.apache.org>.
[ http://issues.apache.org/jira/browse/XERCESJ-1203?page=all ]
Michael Glavassevich reassigned XERCESJ-1203:
---------------------------------------------
Assignee: Michael Glavassevich
> NPE in XMLDTDProcessor
> ----------------------
>
> Key: XERCESJ-1203
> URL: http://issues.apache.org/jira/browse/XERCESJ-1203
> Project: Xerces2-J
> Issue Type: Bug
> Components: DTD
> Affects Versions: 2.8.1
> Reporter: George Cristian Bina
> Assigned To: Michael Glavassevich
>
> When checking for undeclared elements is enabled Xerces throws a NPE in XMLDTDProcessor in private void checkDeclaredElements(DTDGrammar grammar, int elementIndex, int contentSpecIndex, XMLContentSpec contentSpec). That's because int[] contentSpec.otherValue can be null and the current code tries to get the value at index 0. A possible fix is to access otherValue only when we know it exists, change
> else {
> // It's not a leaf, so we have to recurse its left and maybe right
> // nodes. Save both values before we recurse and trash the node.
> final int leftNode = ((int[])contentSpec.value)[0];
> final int rightNode = ((int[])contentSpec.otherValue)[0];
> if ((contentSpec.type == XMLContentSpec.CONTENTSPECNODE_CHOICE)
> || (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_SEQ)) {
> // Recurse on both children.
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> checkDeclaredElements(grammar, elementIndex, rightNode, contentSpec);
> }
> else if (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_MORE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_ONE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ONE_OR_MORE) {
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> }
> }
> to
> else {
> // It's not a leaf, so we have to recurse its left and maybe right
> // nodes. Save both values before we recurse and trash the node.
> if ((contentSpec.type == XMLContentSpec.CONTENTSPECNODE_CHOICE)
> || (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_SEQ)) {
> // Recurse on both children.
> final int leftNode = ((int[])contentSpec.value)[0];
> final int rightNode = ((int[])contentSpec.otherValue)[0];
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> checkDeclaredElements(grammar, elementIndex, rightNode, contentSpec);
> }
> else if (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_MORE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_ONE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ONE_OR_MORE) {
> final int leftNode = ((int[])contentSpec.value)[0];
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> }
> }
> Thanks,
> George
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org
[jira] Closed: (XERCESJ-1203) NPE in XMLDTDProcessor
Posted by "Michael Glavassevich (JIRA)" <xe...@xml.apache.org>.
[ http://issues.apache.org/jira/browse/XERCESJ-1203?page=all ]
Michael Glavassevich closed XERCESJ-1203.
-----------------------------------------
> NPE in XMLDTDProcessor
> ----------------------
>
> Key: XERCESJ-1203
> URL: http://issues.apache.org/jira/browse/XERCESJ-1203
> Project: Xerces2-J
> Issue Type: Bug
> Components: DTD
> Affects Versions: 2.8.1
> Reporter: George Cristian Bina
> Assigned To: Michael Glavassevich
>
> When checking for undeclared elements is enabled Xerces throws a NPE in XMLDTDProcessor in private void checkDeclaredElements(DTDGrammar grammar, int elementIndex, int contentSpecIndex, XMLContentSpec contentSpec). That's because int[] contentSpec.otherValue can be null and the current code tries to get the value at index 0. A possible fix is to access otherValue only when we know it exists, change
> else {
> // It's not a leaf, so we have to recurse its left and maybe right
> // nodes. Save both values before we recurse and trash the node.
> final int leftNode = ((int[])contentSpec.value)[0];
> final int rightNode = ((int[])contentSpec.otherValue)[0];
> if ((contentSpec.type == XMLContentSpec.CONTENTSPECNODE_CHOICE)
> || (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_SEQ)) {
> // Recurse on both children.
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> checkDeclaredElements(grammar, elementIndex, rightNode, contentSpec);
> }
> else if (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_MORE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_ONE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ONE_OR_MORE) {
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> }
> }
> to
> else {
> // It's not a leaf, so we have to recurse its left and maybe right
> // nodes. Save both values before we recurse and trash the node.
> if ((contentSpec.type == XMLContentSpec.CONTENTSPECNODE_CHOICE)
> || (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_SEQ)) {
> // Recurse on both children.
> final int leftNode = ((int[])contentSpec.value)[0];
> final int rightNode = ((int[])contentSpec.otherValue)[0];
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> checkDeclaredElements(grammar, elementIndex, rightNode, contentSpec);
> }
> else if (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_MORE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_ONE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ONE_OR_MORE) {
> final int leftNode = ((int[])contentSpec.value)[0];
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> }
> }
> Thanks,
> George
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org
[jira] Reopened: (XERCESJ-1203) NPE in XMLDTDProcessor
Posted by "Michael Glavassevich (JIRA)" <xe...@xml.apache.org>.
[ http://issues.apache.org/jira/browse/XERCESJ-1203?page=all ]
Michael Glavassevich reopened XERCESJ-1203:
-------------------------------------------
> NPE in XMLDTDProcessor
> ----------------------
>
> Key: XERCESJ-1203
> URL: http://issues.apache.org/jira/browse/XERCESJ-1203
> Project: Xerces2-J
> Issue Type: Bug
> Components: DTD
> Affects Versions: 2.8.1
> Reporter: George Cristian Bina
> Assigned To: Michael Glavassevich
> Fix For: 2.9.0
>
>
> When checking for undeclared elements is enabled Xerces throws a NPE in XMLDTDProcessor in private void checkDeclaredElements(DTDGrammar grammar, int elementIndex, int contentSpecIndex, XMLContentSpec contentSpec). That's because int[] contentSpec.otherValue can be null and the current code tries to get the value at index 0. A possible fix is to access otherValue only when we know it exists, change
> else {
> // It's not a leaf, so we have to recurse its left and maybe right
> // nodes. Save both values before we recurse and trash the node.
> final int leftNode = ((int[])contentSpec.value)[0];
> final int rightNode = ((int[])contentSpec.otherValue)[0];
> if ((contentSpec.type == XMLContentSpec.CONTENTSPECNODE_CHOICE)
> || (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_SEQ)) {
> // Recurse on both children.
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> checkDeclaredElements(grammar, elementIndex, rightNode, contentSpec);
> }
> else if (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_MORE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_ONE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ONE_OR_MORE) {
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> }
> }
> to
> else {
> // It's not a leaf, so we have to recurse its left and maybe right
> // nodes. Save both values before we recurse and trash the node.
> if ((contentSpec.type == XMLContentSpec.CONTENTSPECNODE_CHOICE)
> || (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_SEQ)) {
> // Recurse on both children.
> final int leftNode = ((int[])contentSpec.value)[0];
> final int rightNode = ((int[])contentSpec.otherValue)[0];
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> checkDeclaredElements(grammar, elementIndex, rightNode, contentSpec);
> }
> else if (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_MORE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_ONE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ONE_OR_MORE) {
> final int leftNode = ((int[])contentSpec.value)[0];
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> }
> }
> Thanks,
> George
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org
[jira] Resolved: (XERCESJ-1203) NPE in XMLDTDProcessor
Posted by "Michael Glavassevich (JIRA)" <xe...@xml.apache.org>.
[ http://issues.apache.org/jira/browse/XERCESJ-1203?page=all ]
Michael Glavassevich resolved XERCESJ-1203.
-------------------------------------------
Resolution: Fixed
George, I've just applied your suggested fix to SVN. Can you please verify that this works for you now? Thanks.
> NPE in XMLDTDProcessor
> ----------------------
>
> Key: XERCESJ-1203
> URL: http://issues.apache.org/jira/browse/XERCESJ-1203
> Project: Xerces2-J
> Issue Type: Bug
> Components: DTD
> Affects Versions: 2.8.1
> Reporter: George Cristian Bina
> Assigned To: Michael Glavassevich
>
> When checking for undeclared elements is enabled Xerces throws a NPE in XMLDTDProcessor in private void checkDeclaredElements(DTDGrammar grammar, int elementIndex, int contentSpecIndex, XMLContentSpec contentSpec). That's because int[] contentSpec.otherValue can be null and the current code tries to get the value at index 0. A possible fix is to access otherValue only when we know it exists, change
> else {
> // It's not a leaf, so we have to recurse its left and maybe right
> // nodes. Save both values before we recurse and trash the node.
> final int leftNode = ((int[])contentSpec.value)[0];
> final int rightNode = ((int[])contentSpec.otherValue)[0];
> if ((contentSpec.type == XMLContentSpec.CONTENTSPECNODE_CHOICE)
> || (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_SEQ)) {
> // Recurse on both children.
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> checkDeclaredElements(grammar, elementIndex, rightNode, contentSpec);
> }
> else if (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_MORE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_ONE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ONE_OR_MORE) {
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> }
> }
> to
> else {
> // It's not a leaf, so we have to recurse its left and maybe right
> // nodes. Save both values before we recurse and trash the node.
> if ((contentSpec.type == XMLContentSpec.CONTENTSPECNODE_CHOICE)
> || (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_SEQ)) {
> // Recurse on both children.
> final int leftNode = ((int[])contentSpec.value)[0];
> final int rightNode = ((int[])contentSpec.otherValue)[0];
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> checkDeclaredElements(grammar, elementIndex, rightNode, contentSpec);
> }
> else if (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_MORE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_ONE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ONE_OR_MORE) {
> final int leftNode = ((int[])contentSpec.value)[0];
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> }
> }
> Thanks,
> George
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org
[jira] Closed: (XERCESJ-1203) NPE in XMLDTDProcessor
Posted by "Michael Glavassevich (JIRA)" <xe...@xml.apache.org>.
[ http://issues.apache.org/jira/browse/XERCESJ-1203?page=all ]
Michael Glavassevich closed XERCESJ-1203.
-----------------------------------------
Resolution: Fixed
> NPE in XMLDTDProcessor
> ----------------------
>
> Key: XERCESJ-1203
> URL: http://issues.apache.org/jira/browse/XERCESJ-1203
> Project: Xerces2-J
> Issue Type: Bug
> Components: DTD
> Affects Versions: 2.8.1
> Reporter: George Cristian Bina
> Assigned To: Michael Glavassevich
> Fix For: 2.9.0
>
>
> When checking for undeclared elements is enabled Xerces throws a NPE in XMLDTDProcessor in private void checkDeclaredElements(DTDGrammar grammar, int elementIndex, int contentSpecIndex, XMLContentSpec contentSpec). That's because int[] contentSpec.otherValue can be null and the current code tries to get the value at index 0. A possible fix is to access otherValue only when we know it exists, change
> else {
> // It's not a leaf, so we have to recurse its left and maybe right
> // nodes. Save both values before we recurse and trash the node.
> final int leftNode = ((int[])contentSpec.value)[0];
> final int rightNode = ((int[])contentSpec.otherValue)[0];
> if ((contentSpec.type == XMLContentSpec.CONTENTSPECNODE_CHOICE)
> || (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_SEQ)) {
> // Recurse on both children.
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> checkDeclaredElements(grammar, elementIndex, rightNode, contentSpec);
> }
> else if (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_MORE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_ONE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ONE_OR_MORE) {
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> }
> }
> to
> else {
> // It's not a leaf, so we have to recurse its left and maybe right
> // nodes. Save both values before we recurse and trash the node.
> if ((contentSpec.type == XMLContentSpec.CONTENTSPECNODE_CHOICE)
> || (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_SEQ)) {
> // Recurse on both children.
> final int leftNode = ((int[])contentSpec.value)[0];
> final int rightNode = ((int[])contentSpec.otherValue)[0];
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> checkDeclaredElements(grammar, elementIndex, rightNode, contentSpec);
> }
> else if (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_MORE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_ONE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ONE_OR_MORE) {
> final int leftNode = ((int[])contentSpec.value)[0];
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> }
> }
> Thanks,
> George
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org
[jira] Commented: (XERCESJ-1203) NPE in XMLDTDProcessor
Posted by "George Cristian Bina (JIRA)" <xe...@xml.apache.org>.
[ http://issues.apache.org/jira/browse/XERCESJ-1203?page=comments#action_12441361 ]
George Cristian Bina commented on XERCESJ-1203:
-----------------------------------------------
Thanks Michael also for the additional info. I verified the changes and there is no NPE now. Regards, George.
> NPE in XMLDTDProcessor
> ----------------------
>
> Key: XERCESJ-1203
> URL: http://issues.apache.org/jira/browse/XERCESJ-1203
> Project: Xerces2-J
> Issue Type: Bug
> Components: DTD
> Affects Versions: 2.8.1
> Reporter: George Cristian Bina
> Assigned To: Michael Glavassevich
>
> When checking for undeclared elements is enabled Xerces throws a NPE in XMLDTDProcessor in private void checkDeclaredElements(DTDGrammar grammar, int elementIndex, int contentSpecIndex, XMLContentSpec contentSpec). That's because int[] contentSpec.otherValue can be null and the current code tries to get the value at index 0. A possible fix is to access otherValue only when we know it exists, change
> else {
> // It's not a leaf, so we have to recurse its left and maybe right
> // nodes. Save both values before we recurse and trash the node.
> final int leftNode = ((int[])contentSpec.value)[0];
> final int rightNode = ((int[])contentSpec.otherValue)[0];
> if ((contentSpec.type == XMLContentSpec.CONTENTSPECNODE_CHOICE)
> || (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_SEQ)) {
> // Recurse on both children.
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> checkDeclaredElements(grammar, elementIndex, rightNode, contentSpec);
> }
> else if (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_MORE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_ONE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ONE_OR_MORE) {
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> }
> }
> to
> else {
> // It's not a leaf, so we have to recurse its left and maybe right
> // nodes. Save both values before we recurse and trash the node.
> if ((contentSpec.type == XMLContentSpec.CONTENTSPECNODE_CHOICE)
> || (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_SEQ)) {
> // Recurse on both children.
> final int leftNode = ((int[])contentSpec.value)[0];
> final int rightNode = ((int[])contentSpec.otherValue)[0];
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> checkDeclaredElements(grammar, elementIndex, rightNode, contentSpec);
> }
> else if (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_MORE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_ONE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ONE_OR_MORE) {
> final int leftNode = ((int[])contentSpec.value)[0];
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> }
> }
> Thanks,
> George
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org
[jira] Commented: (XERCESJ-1203) NPE in XMLDTDProcessor
Posted by "George Cristian Bina (JIRA)" <xe...@xml.apache.org>.
[ http://issues.apache.org/jira/browse/XERCESJ-1203?page=comments#action_12441166 ]
George Cristian Bina commented on XERCESJ-1203:
-----------------------------------------------
Hi Michael,
It should appear on a DTD like the one below when both http://apache.org/xml/features/validation/warn-on-undeclared-elemdef and http://apache.org/xml/features/validation/warn-on-duplicate-attdef are enabled:
<?xml encoding="UTF-8"?>
<!ELEMENT test (#PCDATA)>
<!ATTLIST test a CDATA #IMPLIED>
<!ATTLIST test a CDATA #IMPLIED>
This was in one of our test cases and when we enabled the checking for undeclared elements on DTD validation the testcase failed and I noticed the NPE that can be fixed with the proposed patch.
Thanks,
George
> NPE in XMLDTDProcessor
> ----------------------
>
> Key: XERCESJ-1203
> URL: http://issues.apache.org/jira/browse/XERCESJ-1203
> Project: Xerces2-J
> Issue Type: Bug
> Components: DTD
> Affects Versions: 2.8.1
> Reporter: George Cristian Bina
>
> When checking for undeclared elements is enabled Xerces throws a NPE in XMLDTDProcessor in private void checkDeclaredElements(DTDGrammar grammar, int elementIndex, int contentSpecIndex, XMLContentSpec contentSpec). That's because int[] contentSpec.otherValue can be null and the current code tries to get the value at index 0. A possible fix is to access otherValue only when we know it exists, change
> else {
> // It's not a leaf, so we have to recurse its left and maybe right
> // nodes. Save both values before we recurse and trash the node.
> final int leftNode = ((int[])contentSpec.value)[0];
> final int rightNode = ((int[])contentSpec.otherValue)[0];
> if ((contentSpec.type == XMLContentSpec.CONTENTSPECNODE_CHOICE)
> || (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_SEQ)) {
> // Recurse on both children.
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> checkDeclaredElements(grammar, elementIndex, rightNode, contentSpec);
> }
> else if (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_MORE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_ONE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ONE_OR_MORE) {
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> }
> }
> to
> else {
> // It's not a leaf, so we have to recurse its left and maybe right
> // nodes. Save both values before we recurse and trash the node.
> if ((contentSpec.type == XMLContentSpec.CONTENTSPECNODE_CHOICE)
> || (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_SEQ)) {
> // Recurse on both children.
> final int leftNode = ((int[])contentSpec.value)[0];
> final int rightNode = ((int[])contentSpec.otherValue)[0];
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> checkDeclaredElements(grammar, elementIndex, rightNode, contentSpec);
> }
> else if (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_MORE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_ONE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ONE_OR_MORE) {
> final int leftNode = ((int[])contentSpec.value)[0];
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> }
> }
> Thanks,
> George
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org
[jira] Commented: (XERCESJ-1203) NPE in XMLDTDProcessor
Posted by "Michael Glavassevich (JIRA)" <xe...@xml.apache.org>.
[ http://issues.apache.org/jira/browse/XERCESJ-1203?page=comments#action_12441148 ]
Michael Glavassevich commented on XERCESJ-1203:
-----------------------------------------------
Hi George, do you happen to have a test case which causes the NPE to be thrown?
> NPE in XMLDTDProcessor
> ----------------------
>
> Key: XERCESJ-1203
> URL: http://issues.apache.org/jira/browse/XERCESJ-1203
> Project: Xerces2-J
> Issue Type: Bug
> Components: DTD
> Affects Versions: 2.8.1
> Reporter: George Cristian Bina
>
> When checking for undeclared elements is enabled Xerces throws a NPE in XMLDTDProcessor in private void checkDeclaredElements(DTDGrammar grammar, int elementIndex, int contentSpecIndex, XMLContentSpec contentSpec). That's because int[] contentSpec.otherValue can be null and the current code tries to get the value at index 0. A possible fix is to access otherValue only when we know it exists, change
> else {
> // It's not a leaf, so we have to recurse its left and maybe right
> // nodes. Save both values before we recurse and trash the node.
> final int leftNode = ((int[])contentSpec.value)[0];
> final int rightNode = ((int[])contentSpec.otherValue)[0];
> if ((contentSpec.type == XMLContentSpec.CONTENTSPECNODE_CHOICE)
> || (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_SEQ)) {
> // Recurse on both children.
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> checkDeclaredElements(grammar, elementIndex, rightNode, contentSpec);
> }
> else if (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_MORE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_ONE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ONE_OR_MORE) {
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> }
> }
> to
> else {
> // It's not a leaf, so we have to recurse its left and maybe right
> // nodes. Save both values before we recurse and trash the node.
> if ((contentSpec.type == XMLContentSpec.CONTENTSPECNODE_CHOICE)
> || (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_SEQ)) {
> // Recurse on both children.
> final int leftNode = ((int[])contentSpec.value)[0];
> final int rightNode = ((int[])contentSpec.otherValue)[0];
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> checkDeclaredElements(grammar, elementIndex, rightNode, contentSpec);
> }
> else if (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_MORE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_ONE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ONE_OR_MORE) {
> final int leftNode = ((int[])contentSpec.value)[0];
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> }
> }
> Thanks,
> George
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org
[jira] Commented: (XERCESJ-1203) NPE in XMLDTDProcessor
Posted by "Michael Glavassevich (JIRA)" <xe...@xml.apache.org>.
[ http://issues.apache.org/jira/browse/XERCESJ-1203?page=comments#action_12441335 ]
Michael Glavassevich commented on XERCESJ-1203:
-----------------------------------------------
FYI: For the specific test you provided both contentSpec.value and contentSpec.otherValue are null. This is what you get for mixed content. We weren't accounting for that.
> NPE in XMLDTDProcessor
> ----------------------
>
> Key: XERCESJ-1203
> URL: http://issues.apache.org/jira/browse/XERCESJ-1203
> Project: Xerces2-J
> Issue Type: Bug
> Components: DTD
> Affects Versions: 2.8.1
> Reporter: George Cristian Bina
> Assigned To: Michael Glavassevich
>
> When checking for undeclared elements is enabled Xerces throws a NPE in XMLDTDProcessor in private void checkDeclaredElements(DTDGrammar grammar, int elementIndex, int contentSpecIndex, XMLContentSpec contentSpec). That's because int[] contentSpec.otherValue can be null and the current code tries to get the value at index 0. A possible fix is to access otherValue only when we know it exists, change
> else {
> // It's not a leaf, so we have to recurse its left and maybe right
> // nodes. Save both values before we recurse and trash the node.
> final int leftNode = ((int[])contentSpec.value)[0];
> final int rightNode = ((int[])contentSpec.otherValue)[0];
> if ((contentSpec.type == XMLContentSpec.CONTENTSPECNODE_CHOICE)
> || (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_SEQ)) {
> // Recurse on both children.
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> checkDeclaredElements(grammar, elementIndex, rightNode, contentSpec);
> }
> else if (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_MORE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_ONE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ONE_OR_MORE) {
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> }
> }
> to
> else {
> // It's not a leaf, so we have to recurse its left and maybe right
> // nodes. Save both values before we recurse and trash the node.
> if ((contentSpec.type == XMLContentSpec.CONTENTSPECNODE_CHOICE)
> || (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_SEQ)) {
> // Recurse on both children.
> final int leftNode = ((int[])contentSpec.value)[0];
> final int rightNode = ((int[])contentSpec.otherValue)[0];
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> checkDeclaredElements(grammar, elementIndex, rightNode, contentSpec);
> }
> else if (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_MORE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_ONE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ONE_OR_MORE) {
> final int leftNode = ((int[])contentSpec.value)[0];
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> }
> }
> Thanks,
> George
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org
[jira] Updated: (XERCESJ-1203) NPE in XMLDTDProcessor
Posted by "Michael Glavassevich (JIRA)" <xe...@xml.apache.org>.
[ http://issues.apache.org/jira/browse/XERCESJ-1203?page=all ]
Michael Glavassevich updated XERCESJ-1203:
------------------------------------------
Fix Version/s: 2.9.0
> NPE in XMLDTDProcessor
> ----------------------
>
> Key: XERCESJ-1203
> URL: http://issues.apache.org/jira/browse/XERCESJ-1203
> Project: Xerces2-J
> Issue Type: Bug
> Components: DTD
> Affects Versions: 2.8.1
> Reporter: George Cristian Bina
> Assigned To: Michael Glavassevich
> Fix For: 2.9.0
>
>
> When checking for undeclared elements is enabled Xerces throws a NPE in XMLDTDProcessor in private void checkDeclaredElements(DTDGrammar grammar, int elementIndex, int contentSpecIndex, XMLContentSpec contentSpec). That's because int[] contentSpec.otherValue can be null and the current code tries to get the value at index 0. A possible fix is to access otherValue only when we know it exists, change
> else {
> // It's not a leaf, so we have to recurse its left and maybe right
> // nodes. Save both values before we recurse and trash the node.
> final int leftNode = ((int[])contentSpec.value)[0];
> final int rightNode = ((int[])contentSpec.otherValue)[0];
> if ((contentSpec.type == XMLContentSpec.CONTENTSPECNODE_CHOICE)
> || (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_SEQ)) {
> // Recurse on both children.
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> checkDeclaredElements(grammar, elementIndex, rightNode, contentSpec);
> }
> else if (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_MORE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_ONE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ONE_OR_MORE) {
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> }
> }
> to
> else {
> // It's not a leaf, so we have to recurse its left and maybe right
> // nodes. Save both values before we recurse and trash the node.
> if ((contentSpec.type == XMLContentSpec.CONTENTSPECNODE_CHOICE)
> || (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_SEQ)) {
> // Recurse on both children.
> final int leftNode = ((int[])contentSpec.value)[0];
> final int rightNode = ((int[])contentSpec.otherValue)[0];
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> checkDeclaredElements(grammar, elementIndex, rightNode, contentSpec);
> }
> else if (contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_MORE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ZERO_OR_ONE
> || contentSpec.type == XMLContentSpec.CONTENTSPECNODE_ONE_OR_MORE) {
> final int leftNode = ((int[])contentSpec.value)[0];
> checkDeclaredElements(grammar, elementIndex, leftNode, contentSpec);
> }
> }
> Thanks,
> George
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org