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