[ 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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]