[
https://issues.apache.org/jira/browse/LUCENE-5267?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13789958#comment-13789958
]
Littlestar edited comment on LUCENE-5267 at 10/9/13 2:50 AM:
-------------------------------------------------------------
{noformat}
public static int decompress(DataInput compressed, int decompressedLen, byte[]
dest, int dOff) throws IOException {
final int destEnd = dest.length;
do {
..........................
// copying a multiple of 8 bytes can make decompression from 5% to 10%
faster
final int fastLen = (matchLen + 7) & 0xFFFFFFF8;
if (matchDec < matchLen || dOff + fastLen > destEnd) {
// overlap -> naive incremental copy
for (int ref = dOff - matchDec, end = dOff + matchLen; dOff < end;
++ref, ++dOff) {
dest[dOff] = dest[ref];
}
} else {
// no overlap -> arraycopy
// System.out.println("dest.length=" + dest.length + ",dOff=" + dOff +
",matchDec=" + matchDec + ",fastLen=" + fastLen);
System.arraycopy(dest, dOff - matchDec, dest, dOff, fastLen); //here
throws java.lang.ArrayIndexOutOfBoundsException
dOff += matchLen; //here maybe dOff += fastLen;
}
} while (dOff < decompressedLen);
return dOff;
}
{noformat}
was (Author: cnstar9988):
{noformat}
public static int decompress(DataInput compressed, int decompressedLen, byte[]
dest, int dOff) throws IOException {
final int destEnd = dest.length;
do {
// literals
final int token = compressed.readByte() & 0xFF;
int literalLen = token >>> 4;
if (literalLen != 0) {
if (literalLen == 0x0F) {
byte len;
while ((len = compressed.readByte()) == (byte) 0xFF) {
literalLen += 0xFF;
}
literalLen += len & 0xFF;
}
compressed.readBytes(dest, dOff, literalLen);
dOff += literalLen;
}
if (dOff >= decompressedLen) {
break;
}
// matchs
final int matchDec = (compressed.readByte() & 0xFF) |
((compressed.readByte() & 0xFF) << 8);
assert matchDec > 0;
int matchLen = token & 0x0F;
if (matchLen == 0x0F) {
int len;
while ((len = compressed.readByte()) == (byte) 0xFF) {
matchLen += 0xFF;
}
matchLen += len & 0xFF;
}
matchLen += MIN_MATCH;
// copying a multiple of 8 bytes can make decompression from 5% to 10%
faster
final int fastLen = (matchLen + 7) & 0xFFFFFFF8;
if (matchDec < matchLen || dOff + fastLen > destEnd) {
// overlap -> naive incremental copy
for (int ref = dOff - matchDec, end = dOff + matchLen; dOff < end;
++ref, ++dOff) {
dest[dOff] = dest[ref];
}
} else {
// no overlap -> arraycopy
// System.out.println("dest.length=" + dest.length + ",dOff=" + dOff +
",matchDec=" + matchDec + ",fastLen=" + fastLen);
System.arraycopy(dest, dOff - matchDec, dest, dOff, fastLen); //here
throws java.lang.ArrayIndexOutOfBoundsException
dOff += matchLen; //here maybe dOff += fastLen;
}
} while (dOff < decompressedLen);
return dOff;
}
{noformat}
> java.lang.ArrayIndexOutOfBoundsException on reading data
> --------------------------------------------------------
>
> Key: LUCENE-5267
> URL: https://issues.apache.org/jira/browse/LUCENE-5267
> Project: Lucene - Core
> Issue Type: Bug
> Components: core/index
> Affects Versions: 4.4
> Reporter: Littlestar
>
> java.lang.ArrayIndexOutOfBoundsException
> at org.apache.lucene.codecs.compressing.LZ4.decompress(LZ4.java:132)
> at
> org.apache.lucene.codecs.compressing.CompressionMode$4.decompress(CompressionMode.java:135)
> at
> org.apache.lucene.codecs.compressing.CompressingStoredFieldsReader.visitDocument(CompressingStoredFieldsReader.java:336)
> at
> org.apache.lucene.index.SegmentReader.document(SegmentReader.java:133)
> at
> org.apache.lucene.index.BaseCompositeReader.document(BaseCompositeReader.java:110)
> at
> org.apache.lucene.index.SlowCompositeReaderWrapper.document(SlowCompositeReaderWrapper.java:212)
> at
> org.apache.lucene.index.FilterAtomicReader.document(FilterAtomicReader.java:365)
> at
> org.apache.lucene.index.BaseCompositeReader.document(BaseCompositeReader.java:110)
> at org.apache.lucene.index.IndexReader.document(IndexReader.java:447)
> at org.apache.lucene.search.IndexSearcher.doc(IndexSearcher.java:204)
--
This message was sent by Atlassian JIRA
(v6.1#6144)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]