Program: 66979
Project: 66979
Buggy source:
public Object unmarshal(org.xml.sax.XMLReader xmlReader,InputSource inputSource,Class clazz){
  try {
    XMLContext xmlContext=xmlUnmarshaller.getXMLContext();
    if (xmlContext.hasDocumentPreservation()) {
      SAXDocumentBuilder saxDocumentBuilder=new SAXDocumentBuilder();
      xmlReader.setContentHandler(saxDocumentBuilder);
      xmlReader.parse(inputSource);
      return unmarshal(saxDocumentBuilder.getDocument().getDocumentElement(),clazz);
    }
    boolean isPrimitiveWrapper=isPrimitiveWrapper(clazz);
    UnmarshalRecord unmarshalRecord;
    XMLDescriptor xmlDescriptor=null;
    AbstractSession session=null;
    if (isPrimitiveWrapper) {
      unmarshalRecord=new XMLRootRecord(clazz);
      unmarshalRecord.setSession((AbstractSession)xmlUnmarshaller.getXMLContext().getSession(0));
    }
 else     if (clazz == ClassConstants.OBJECT) {
      SAXUnmarshallerHandler saxUnmarshallerHandler=new SAXUnmarshallerHandler(xmlUnmarshaller.getXMLContext());
      saxUnmarshallerHandler.setXMLReader((XMLReader)xmlReader);
      saxUnmarshallerHandler.setUnmarshaller(xmlUnmarshaller);
      saxUnmarshallerHandler.setKeepAsElementPolicy(UnmarshalKeepAsElementPolicy.KEEP_UNKNOWN_AS_ELEMENT);
      xmlReader.setContentHandler(saxUnmarshallerHandler);
      ((XMLReader)xmlReader).parse(inputSource,saxUnmarshallerHandler);
      saxUnmarshallerHandler.resolveReferences();
      return saxUnmarshallerHandler.getObject();
    }
 else {
      session=xmlContext.getReadSession(clazz);
      xmlDescriptor=(XMLDescriptor)session.getDescriptor(clazz);
      unmarshalRecord=(UnmarshalRecord)xmlDescriptor.getObjectBuilder().createRecord(session);
    }
    XMLReader extendedXMLReader;
    if (xmlReader instanceof XMLReader) {
      extendedXMLReader=(XMLReader)xmlReader;
    }
 else {
      extendedXMLReader=new XMLReader(xmlReader);
    }
    unmarshalRecord.setXMLReader(extendedXMLReader);
    unmarshalRecord.setUnmarshaller(xmlUnmarshaller);
    extendedXMLReader.setContentHandler(unmarshalRecord);
    try {
      extendedXMLReader.setProperty("String_Node_Str",unmarshalRecord);
    }
 catch (    SAXNotRecognizedException ex) {
    }
catch (    SAXNotSupportedException ex) {
    }
    extendedXMLReader.parse(inputSource);
    xmlUnmarshaller.resolveReferences(session);
    if (isPrimitiveWrapper || clazz == ClassConstants.OBJECT) {
      return unmarshalRecord.getCurrentObject();
    }
    return xmlDescriptor.wrapObjectInXMLRoot(unmarshalRecord,this.isResultAlwaysXMLRoot);
  }
 catch (  IOException e) {
    throw XMLMarshalException.unmarshalException(e);
  }
catch (  SAXException e) {
    throw convertSAXException(e);
  }
}

Fixed version (ground truth):
public Object unmarshal(org.xml.sax.XMLReader xmlReader,InputSource inputSource,Class clazz){
  try {
    XMLContext xmlContext=xmlUnmarshaller.getXMLContext();
    if (xmlContext.hasDocumentPreservation()) {
      SAXDocumentBuilder saxDocumentBuilder=new SAXDocumentBuilder();
      xmlReader.setContentHandler(saxDocumentBuilder);
      xmlReader.parse(inputSource);
      return unmarshal(saxDocumentBuilder.getDocument().getDocumentElement(),clazz);
    }
    boolean isPrimitiveWrapper=isPrimitiveWrapper(clazz);
    UnmarshalRecord unmarshalRecord;
    XMLDescriptor xmlDescriptor=null;
    AbstractSession session=null;
    if (isPrimitiveWrapper) {
      unmarshalRecord=new XMLRootRecord(clazz);
      unmarshalRecord.setSession((AbstractSession)xmlUnmarshaller.getXMLContext().getSession(0));
    }
 else     if (clazz == ClassConstants.OBJECT) {
      SAXUnmarshallerHandler saxUnmarshallerHandler=new SAXUnmarshallerHandler(xmlUnmarshaller.getXMLContext());
      saxUnmarshallerHandler.setXMLReader((XMLReader)xmlReader);
      saxUnmarshallerHandler.setUnmarshaller(xmlUnmarshaller);
      saxUnmarshallerHandler.setKeepAsElementPolicy(UnmarshalKeepAsElementPolicy.KEEP_UNKNOWN_AS_ELEMENT);
      xmlReader.setContentHandler(saxUnmarshallerHandler);
      xmlReader.parse(inputSource);
      saxUnmarshallerHandler.resolveReferences();
      return saxUnmarshallerHandler.getObject();
    }
 else {
      session=xmlContext.getReadSession(clazz);
      xmlDescriptor=(XMLDescriptor)session.getDescriptor(clazz);
      unmarshalRecord=(UnmarshalRecord)xmlDescriptor.getObjectBuilder().createRecord(session);
    }
    XMLReader extendedXMLReader;
    if (xmlReader instanceof XMLReader) {
      extendedXMLReader=(XMLReader)xmlReader;
    }
 else {
      extendedXMLReader=new XMLReader(xmlReader);
    }
    unmarshalRecord.setXMLReader(extendedXMLReader);
    unmarshalRecord.setUnmarshaller(xmlUnmarshaller);
    extendedXMLReader.setContentHandler(unmarshalRecord);
    try {
      extendedXMLReader.setProperty("String_Node_Str",unmarshalRecord);
    }
 catch (    SAXNotRecognizedException ex) {
    }
catch (    SAXNotSupportedException ex) {
    }
    extendedXMLReader.parse(inputSource);
    xmlUnmarshaller.resolveReferences(session);
    if (isPrimitiveWrapper || clazz == ClassConstants.OBJECT) {
      return unmarshalRecord.getCurrentObject();
    }
    return xmlDescriptor.wrapObjectInXMLRoot(unmarshalRecord,this.isResultAlwaysXMLRoot);
  }
 catch (  IOException e) {
    throw XMLMarshalException.unmarshalException(e);
  }
catch (  SAXException e) {
    throw convertSAXException(e);
  }
}