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