byte area for lengths is read in platform endian, but expects big endian
------------------------------------------------------------------------

                 Key: JENA-91
                 URL: https://issues.apache.org/jira/browse/JENA-91
             Project: Jena
          Issue Type: Bug
          Components: TDB
         Environment: Windows (and I presume any little endian system)
            Reporter: Simon Helsen
            Priority: Critical


I tried to debug the OME and check why a bytebuffer is causing my native memory 
to explode in almost no time. It all seems to happen in this bit of code in 
com.hp.hpl.jena.tdb.base.objectfile.ObjectFileStorage (lines 243 onwards)

  // No - it's in the underlying file storage.
        lengthBuffer.clear() ;
        int x = file.read(lengthBuffer, loc) ;
        if ( x != 4 )
            throw new 
FileException("ObjectFile.read("+loc+")["+filesize+"]["+file.size()+"]: Failed 
to read the length : got "+x+" bytes") ;
        int len = lengthBuffer.getInt(0) ;
        ByteBuffer bb = ByteBuffer.allocate(len) ;

My debugger shows that x==4. It also shows the lengthBuffer has the following 
content: [111, 110, 61, 95], however the value of len=1869495647, which is 
rather a lot :-) Obviously, the next statement (ByteBuffer.allocate) causes the 
OME

So, looking into it, lengthBuffer.getInt(0)==1869495647, but 
lenghtBuffer.get(0)==111, which seems more correct. Then I noticed that the 
bytebuffer also says bigEndian==true. I am running all of this on Windows 7. 
which is to the best of my knowledge little endian

I think this can only work correctly if the byteBuffer for lengths (at least) 
have their order explicitly set to that of the platform. So, somewhere in the 
code, you'd need to make sure to set

lengthBuffer.order(ByteOrder.nativeOrder())

I think this only affects this particular one because it manages lengths, but I 
don't know the code well enough to know if there are other places that may be 
affected

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to