[ https://issues.apache.org/jira/browse/XERCESJ-1554?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13207497#comment-13207497 ]
Guangtai Liang commented on XERCESJ-1554: ----------------------------------------- Please refer to the invalid schema file which was provided for reproducing the NPE issue ( https://issues.apache.org/jira/browse/XERCESJ-1078) The detailed description about this issue is copied here : "in case of an invalid schema file with the error "s4s-elt-must-match.2" (The content of 'identity constraint' must match (annotation?, selector, field+). Not enough elements were found.) the attribute fSelector might be null and thus the method getSelectorStr() causes a NPE. In my case, anylsing invalid schema files (as good as possible) it is important not to have this exception, so I'm working with my own patched version of Xerces2-J. It would be nice if you would fix this somewhen. Example from schema test suite to preproduce: msxsdtest\identityConstraint\idB059.xsd My fix is quite simple: just check on null: Old: return fSelector.toString(); New: return fSelector == null ? null : fSelector.toString(); " If fSelector can be null in such case, I think the null-check should also be made before the dereference on fSelector in the method "equals". > An incomplete fix for the NPE bugs in IdentityConstraint.java > ------------------------------------------------------------- > > Key: XERCESJ-1554 > URL: https://issues.apache.org/jira/browse/XERCESJ-1554 > Project: Xerces2-J > Issue Type: Bug > Components: Other > Reporter: Guangtai Liang > Priority: Critical > Labels: incomplete_fix, missing_fixes > Original Estimate: 10m > Remaining Estimate: 10m > > The fix revision 320527 was aimed to remove an NPE bug on the > "this.fSelector" in the method "getSelectorStr" of the file > "/xerces/java/trunk/src/org/apache/xerces/impl/xs/identity/IdentityConstraint.java" > , but it is incomplete. > Since the "this.fSelector" is a class field and also could be null during the > run-time execution, it should also be null-checked before being dereferenced > in other methods. > The buggy code locations the same fix needs to be applied at are as bellows: > Line 148 of the method "equals"; > public boolean equals(IdentityConstraint id) { > boolean areEqual = > fIdentityConstraintName.equals(id.fIdentityConstraintName); > if(!areEqual) return false; > areEqual = fSelector.toString().equals(id.fSelector.toString()); > if(!areEqual) return false; > areEqual = (fFieldCount == id.fFieldCount); > if(!areEqual) return false; > for(int i=0; i<fFieldCount; i++) > if(!fFields[i].toString().equals(id.fFields[i].toString())) > return false; > return true; > } // equals -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: j-dev-unsubscr...@xerces.apache.org For additional commands, e-mail: j-dev-h...@xerces.apache.org