--- EscherClientAnchorRecord.java.sav 2005-05-06 12:24:25.000000000 +0100 +++ EscherClientAnchorRecord.java 2005-05-06 17:03:56.000000000 +0100 @@ -61,15 +61,19 @@ int bytesRemaining = readHeader( data, offset ); int pos = offset + 8; int size = 0; + + // Always find 4 two byte entries. Sometimes find 9 field_1_flag = LittleEndian.getShort( data, pos + size ); size += 2; field_2_col1 = LittleEndian.getShort( data, pos + size ); size += 2; field_3_dx1 = LittleEndian.getShort( data, pos + size ); size += 2; field_4_row1 = LittleEndian.getShort( data, pos + size ); size += 2; - field_5_dy1 = LittleEndian.getShort( data, pos + size ); size += 2; - field_6_col2 = LittleEndian.getShort( data, pos + size ); size += 2; - field_7_dx2 = LittleEndian.getShort( data, pos + size ); size += 2; - field_8_row2 = LittleEndian.getShort( data, pos + size ); size += 2; - field_9_dy2 = LittleEndian.getShort( data, pos + size ); size += 2; + if(bytesRemaining >= 18) { + field_5_dy1 = LittleEndian.getShort( data, pos + size ); size += 2; + field_6_col2 = LittleEndian.getShort( data, pos + size ); size += 2; + field_7_dx2 = LittleEndian.getShort( data, pos + size ); size += 2; + field_8_row2 = LittleEndian.getShort( data, pos + size ); size += 2; + field_9_dy2 = LittleEndian.getShort( data, pos + size ); size += 2; + } bytesRemaining -= size; remainingData = new byte[bytesRemaining]; System.arraycopy( data, pos + size, remainingData, 0, bytesRemaining );