[ 
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]

Reply via email to