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 "Michael Glavassevich (JIRA)" <xe...@xml.apache.org> on 2006/11/20 23:28:02 UTC

[jira] Closed: (XERCESJ-1203) NPE in XMLDTDProcessor

     [ 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