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 bu...@apache.org on 2001/10/08 21:39:30 UTC

DO NOT REPLY [Bug 4026] New: - usage of unparsed entity causes NullPointerException

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=4026>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=4026

usage of unparsed entity causes NullPointerException

           Summary: usage of unparsed entity causes NullPointerException
           Product: Xerces-J
           Version: 1.4.3
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: Blocker
          Priority: Other
         Component: DOM
        AssignedTo: xerces-j-dev@xml.apache.org
        ReportedBy: jtaylor@menerva.com


The usage of an unparsed external entity always causes a NullPointerException.  
To reproduce, use the DOMParser to attempt to parse any XML file that contains 
an inline DOCTYPE that contains an unparsed entity.  It makes no difference 
whether or not the entity is referenced in the DOM.  Here's a simple sample 
that reproduces the problem:

<!DOCTYPE UnparsedEntityTest [
	<!NOTATION xsd SYSTEM "xsd">
	<!ENTITY xsd1075 PUBLIC "EntityTest.xsd" "1075" NDATA xsd>
]>
<UnparsedEntityTest/>

The problem is in org.apache.xerces.readers.DefaultEntityHandler.java in the 
reference to a null member variable fSystemId in addExternalEntityDecl, 
addUnparsedEntityDecl, and addNotationDecl. Here's a new version of these 
functions that fixes the problem:

    public int addExternalEntityDecl(int name, int publicId, int systemId, 
boolean isExternal) throws Exception {
		String aname=fStringPool.toString(name);
		int entityHandle = fEntityPool.addEntityDecl(name, -1, 
publicId, systemId, fStringPool.addSymbol(aname), -1, isExternal);
        return entityHandle;
    }
    public int addUnparsedEntityDecl(int name, int publicId, int systemId, int 
notationName, boolean isExternal) throws Exception {
		String aname=fStringPool.toString(name);
		int entityHandle = fEntityPool.addEntityDecl(name, -1, 
publicId, systemId, fStringPool.addSymbol(aname), notationName, isExternal);
        if (!fEntityPool.isNotationDeclared(notationName)) {
            Object[] args = { fStringPool.toString(name),
                              fStringPool.toString(notationName) };
            fEntityPool.addRequiredNotation(notationName,
                                            fErrorReporter.getLocator(),
                                            
XMLMessages.MSG_NOTATION_NOT_DECLARED_FOR_UNPARSED_ENTITYDECL,
                                            XMLMessages.VC_NOTATION_DECLARED,
                                            args);
        }
        return entityHandle;
    }
    public int addNotationDecl(int notationName, int publicId, int systemId, 
boolean isExternal) throws Exception {
		String aname=fStringPool.toString(notationName);
        int notationHandle = fEntityPool.addNotationDecl(notationName, 
publicId, systemId, fStringPool.addSymbol(aname), isExternal);
        return notationHandle;
    }

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-j-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-j-dev-help@xml.apache.org