Hi All,
I am trying to read the corrupt image xls document using poi library.But
problem is  I am retrieving the bytesRemaining value wrongly

Actual value I am getting:
55028

Expected value:
120564

as bytes read is also 120564  which causes negative  array index exception
in the line  _remainingData = new byte[bytesRemaining].how can be it fixed?
please provide any suggestions



Code
 public int More ...fillFields(byte[] data, int offset, EscherRecordFactory
recordFactory) {

         int bytesRemaining = readHeader( data, offset );


         int pos = offset + 8;
         field_1_blipTypeWin32 = data[pos];
         field_2_blipTypeMacOS = data[pos + 1];
         System.arraycopy( data, pos + 2, field_3_uid = new byte[16], 0, 16
);
         field_4_tag = LittleEndian.getShort( data, pos + 18 );
         field_5_size = LittleEndian.getInt( data, pos + 20 );
         field_6_ref = LittleEndian.getInt( data, pos + 24 );
        field_7_offset = LittleEndian.getInt( data, pos + 28 );
         field_8_usage = data[pos + 32];
         field_9_name = data[pos + 33];
         field_10_unused2 = data[pos + 34];
         field_11_unused3 = data[pos + 35];
         bytesRemaining -= 36;

         int bytesRead = 0;
         if (bytesRemaining > 0) {
             // Some older escher formats skip this last record
             field_12_blipRecord = (EscherBlipRecord)
recordFactory.createRecord( data, pos + 36 );
             bytesRead = field_12_blipRecord.fillFields( data, pos + 36,
recordFactory );
         }
         pos += 36 + bytesRead;
         bytesRemaining -= bytesRead;

         _remainingData = new byte[bytesRemaining];  // negative array
index exception occurs here
         System.arraycopy( data, pos, _remainingData, 0, bytesRemaining );
         return bytesRemaining + 8 + 36 + (field_12_blipRecord == null ? 0
: field_12_blipRecord.getRecordSize()) ;

     }

Class:
EscherBSERecord

Method:
fillFields

Please refer the code:
http://grepcode.com/file/repo1.maven.org/maven2/org.apache.poi/poi/3.7beta3/org/apache/poi/ddf/EscherBSERecord.java

Thanks & Regards,
Rajkumar B

Reply via email to