Lines 42-60
Link Here
|
42 |
{ |
42 |
{ |
43 |
Record r = null; |
43 |
Record r = null; |
44 |
|
44 |
|
|
|
45 |
short adjustedSize = size; |
46 |
if( size < 0) { |
47 |
adjustedSize = 0; |
48 |
} else if( offset + size > data.length) { |
49 |
adjustedSize = (short) (data.length - offset); |
50 |
if( adjustedSize > 4) { |
51 |
adjustedSize -= 4; |
52 |
} |
53 |
} |
45 |
switch ( subRecordSid ) |
54 |
switch ( subRecordSid ) |
46 |
{ |
55 |
{ |
47 |
case CommonObjectDataSubRecord.sid: |
56 |
case CommonObjectDataSubRecord.sid: |
48 |
r = new CommonObjectDataSubRecord( subRecordSid, size, data, offset ); |
57 |
r = new CommonObjectDataSubRecord( subRecordSid, adjustedSize, data, offset ); |
49 |
break; |
58 |
break; |
50 |
case GroupMarkerSubRecord.sid: |
59 |
case GroupMarkerSubRecord.sid: |
51 |
r = new GroupMarkerSubRecord( subRecordSid, size, data, offset ); |
60 |
r = new GroupMarkerSubRecord( subRecordSid, adjustedSize, data, offset ); |
52 |
break; |
61 |
break; |
53 |
case EndSubRecord.sid: |
62 |
case EndSubRecord.sid: |
54 |
r = new EndSubRecord( subRecordSid, size, data, offset ); |
63 |
r = new EndSubRecord( subRecordSid, adjustedSize, data, offset ); |
55 |
break; |
64 |
break; |
56 |
default: |
65 |
default: |
57 |
r = new UnknownRecord( subRecordSid, size, data, offset ); |
66 |
r = new UnknownRecord( subRecordSid, adjustedSize, data, offset ); |
58 |
} |
67 |
} |
59 |
|
68 |
|
60 |
return r; |
69 |
return r; |