[jira] [Updated] (LUCENE-8624) ByteBuffersDataOutput Integer Overflow
[ https://issues.apache.org/jira/browse/LUCENE-8624?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Mulugeta Mammo updated LUCENE-8624: --- Description: Hi, When indexing large data sets with ByteBuffersDirectory, an exception like the below is thrown: Caused by: java.lang.IllegalArgumentException: cannot write negative vLong (got: -4294888321) at org.apache.lucene.store.DataOutput.writeVLong(DataOutput.java:225) at org.apache.lucene.codecs.lucene50.Lucene50SkipWriter.writeSkipData(Lucene50SkipWriter.java:182) at org.apache.lucene.codecs.MultiLevelSkipListWriter.bufferSkip(MultiLevelSkipListWriter.java:143) at org.apache.lucene.codecs.lucene50.Lucene50SkipWriter.bufferSkip(Lucene50SkipWriter.java:162) at org.apache.lucene.codecs.lucene50.Lucene50PostingsWriter.startDoc(Lucene50PostingsWriter.java:228) at org.apache.lucene.codecs.PushPostingsWriterBase.writeTerm(PushPostingsWriterBase.java:148) at org.apache.lucene.codecs.blocktree.BlockTreeTermsWriter$TermsWriter.write(BlockTreeTermsWriter.java:865) at org.apache.lucene.codecs.blocktree.BlockTreeTermsWriter.write(BlockTreeTermsWriter.java:344) at org.apache.lucene.codecs.FieldsConsumer.merge(FieldsConsumer.java:105) at org.apache.lucene.codecs.perfield.PerFieldPostingsFormat$FieldsWriter.merge(PerFieldPostingsFormat.java:169) at org.apache.lucene.index.SegmentMerger.mergeTerms(SegmentMerger.java:244) at org.apache.lucene.index.SegmentMerger.merge(SegmentMerger.java:139) at org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:4453) at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:4075) {{The exception is caused by an integer overflow while calling getFilePointer() in Lucene50PostingsWriter, which eventually calls the size() method in ByteBuffersDataOutput.}} {code:java|title=ByteBuffersDataOutput.java|borderStyle=solid} public long size() { long size = 0; int blockCount = blocks.size(); if (blockCount >= 1) { int fullBlockSize = (blockCount - 1) * blockSize(); // throws integer overflow int lastBlockSize = blocks.getLast().position(); size = fullBlockSize + lastBlockSize; } return size; } {code} In my case, I had a blockCount = 65 and a blockSize() = 33554432 which overflows fullBlockSize. The fix: {code:java|title=ByteBuffersDataOutput.java|borderStyle=solid} public long size() { long size = 0; int blockCount = blocks.size(); if (blockCount >= 1) { long fullBlockSize = 1L * (blockCount - 1) * blockSize(); int lastBlockSize = blocks.getLast().position(); size = fullBlockSize + lastBlockSize; } return size; } {code} Thanks was: Hi, When indexing large data sets with ByteBuffersDirectory, an exception like the below is thrown: Caused by: java.lang.IllegalArgumentException: cannot write negative vLong (got: -4294888321) at org.apache.lucene.store.DataOutput.writeVLong(DataOutput.java:225) at org.apache.lucene.codecs.lucene50.Lucene50SkipWriter.writeSkipData(Lucene50SkipWriter.java:182) at org.apache.lucene.codecs.MultiLevelSkipListWriter.bufferSkip(MultiLevelSkipListWriter.java:143) at org.apache.lucene.codecs.lucene50.Lucene50SkipWriter.bufferSkip(Lucene50SkipWriter.java:162) at org.apache.lucene.codecs.lucene50.Lucene50PostingsWriter.startDoc(Lucene50PostingsWriter.java:228) at org.apache.lucene.codecs.PushPostingsWriterBase.writeTerm(PushPostingsWriterBase.java:148) at org.apache.lucene.codecs.blocktree.BlockTreeTermsWriter$TermsWriter.write(BlockTreeTermsWriter.java:865) at org.apache.lucene.codecs.blocktree.BlockTreeTermsWriter.write(BlockTreeTermsWriter.java:344) at org.apache.lucene.codecs.FieldsConsumer.merge(FieldsConsumer.java:105) at org.apache.lucene.codecs.perfield.PerFieldPostingsFormat$FieldsWriter.merge(PerFieldPostingsFormat.java:169) at org.apache.lucene.index.SegmentMerger.mergeTerms(SegmentMerger.java:244) at org.apache.lucene.index.SegmentMerger.merge(SegmentMerger.java:139) at org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:4453) at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:4075) {{The exception is caused by an integer overflow while calling getFilePointer() in Lucene50PostingsWriter, which eventually calls the size() method in ByteBuffersDataOutput.}} {code:java|title=ByteBuffersDataOutput.java|borderStyle=solid} public long size() { long size = 0; int blockCount = blocks.size(); if (blockCount >= 1) { int fullBlockSize = (blockCount - 1) * blockSize(); int lastBlockSize = blocks.getLast().position(); size = fullBlockSize + lastBlockSize; } return size; } {code} In my case, I had a blockCount = 65 and a blockSize() = 33554432 which overflows fullBlockSize. The fix: {code:java|title=ByteBuffersDataOutput.java|borderStyle=solid} public long size() { long size = 0; int blockCount = blocks.size(); if (blockCount >= 1) { long fullBlockSize = 1L * (blockCount - 1) * blockSize(); int lastBlockSize = blocks.getLast().position(); size =
[jira] [Updated] (LUCENE-8625) Integer Overflow in ByteBuffersDataInput
[ https://issues.apache.org/jira/browse/LUCENE-8625?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Mulugeta Mammo updated LUCENE-8625: --- Description: Hi, Once I fixed the bug here, https://issues.apache.org/jira/browse/LUCENE-8624, I encountered another Integer Overflow error in ByteBuffersDataInput: Exception in thread "Lucene Merge Thread #1540" Exception in thread "main" org.apache.lucene.index.MergePolicy$MergeException: java.lang.ArithmeticException: integer overflow at org.apache.lucene.index.ConcurrentMergeScheduler.handleMergeException(ConcurrentMergeScheduler.java:705) at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:685) Caused by: java.lang.ArithmeticException: integer overflow at java.lang.Math.toIntExact(Math.java:1011) at org.apache.lucene.store.ByteBuffersDataInput.sliceBufferList(ByteBuffersDataInput.java:299) at org.apache.lucene.store.ByteBuffersDataInput.slice(ByteBuffersDataInput.java:223) at org.apache.lucene.store.ByteBuffersIndexInput.clone(ByteBuffersIndexInput.java:186) at org.apache.lucene.store.ByteBuffersDirectory$FileEntry.openInput(ByteBuffersDirectory.java:254) at org.apache.lucene.store.ByteBuffersDirectory.openInput(ByteBuffersDirectory.java:223) at org.apache.lucene.store.FilterDirectory.openInput(FilterDirectory.java:100) at org.apache.lucene.store.FilterDirectory.openInput(FilterDirectory.java:100) at org.apache.lucene.store.FilterDirectory.openInput(FilterDirectory.java:100) at org.apache.lucene.store.Directory.openChecksumInput(Directory.java:157) at org.apache.lucene.codecs.lucene50.Lucene50CompoundFormat.write(Lucene50CompoundFormat.java:89) at org.apache.lucene.index.IndexWriter.createCompoundFile(IndexWriter.java:5004) at org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:4517) at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:4075) at org.apache.lucene.index.ConcurrentMergeScheduler.doMerge(ConcurrentMergeScheduler.java:626) at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:663) The exception is caused by a Math.toIntExact in sliceBufferList in ByteBuffersDataInput. {code:java|title=ByteBuffersDataInput.java|borderStyle=solid} private static List sliceBufferList(List buffers, long offset, long length) { ensureAssumptions(buffers); if (buffers.size() == 1) { ByteBuffer cloned = buffers.get(0).asReadOnlyBuffer(); cloned.position(Math.toIntExact(cloned.position() + offset)); cloned.limit(Math.toIntExact(length + cloned.position())); return Arrays.asList(cloned); } else { long absStart = buffers.get(0).position() + offset; long absEnd = Math.toIntExact(absStart + length); // throws integer overflow ... {code} Removing the Math.toIntExact works but I'm not sure if the logic will still be right since absEnd is used to calculate endOffset after a few lines: {code:java} int endOffset = (int) absEnd & blockMask; {code} Thanks, was: Hi, Once I fixed the bug here, https://issues.apache.org/jira/browse/LUCENE-8624, I encountered another Integer Overflow error in ByteBuffersDataInput: Exception in thread "Lucene Merge Thread #1540" Exception in thread "main" org.apache.lucene.index.MergePolicy$MergeException: java.lang.ArithmeticException: integer overflow at org.apache.lucene.index.ConcurrentMergeScheduler.handleMergeException(ConcurrentMergeScheduler.java:705) at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:685) Caused by: java.lang.ArithmeticException: integer overflow at java.lang.Math.toIntExact(Math.java:1011) at org.apache.lucene.store.ByteBuffersDataInput.sliceBufferList(ByteBuffersDataInput.java:299) at org.apache.lucene.store.ByteBuffersDataInput.slice(ByteBuffersDataInput.java:223) at org.apache.lucene.store.ByteBuffersIndexInput.clone(ByteBuffersIndexInput.java:186) at org.apache.lucene.store.ByteBuffersDirectory$FileEntry.openInput(ByteBuffersDirectory.java:254) at org.apache.lucene.store.ByteBuffersDirectory.openInput(ByteBuffersDirectory.java:223) at org.apache.lucene.store.FilterDirectory.openInput(FilterDirectory.java:100) at org.apache.lucene.store.FilterDirectory.openInput(FilterDirectory.java:100) at org.apache.lucene.store.FilterDirectory.openInput(FilterDirectory.java:100) at org.apache.lucene.store.Directory.openChecksumInput(Directory.java:157) at org.apache.lucene.codecs.lucene50.Lucene50CompoundFormat.write(Lucene50CompoundFormat.java:89) at org.apache.lucene.index.IndexWriter.createCompoundFile(IndexWriter.java:5004) at org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:4517) at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:4075) at org.apache.lucene.index.ConcurrentMergeScheduler.doMerge(ConcurrentMergeScheduler.java:626) at
[jira] [Updated] (LUCENE-8625) Integer Overflow in ByteBuffersDataInput
[ https://issues.apache.org/jira/browse/LUCENE-8625?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Mulugeta Mammo updated LUCENE-8625: --- Description: Hi, Once I fixed the bug here, https://issues.apache.org/jira/browse/LUCENE-8624, I encountered another Integer Overflow error in ByteBuffersDataInput: Exception in thread "Lucene Merge Thread #1540" Exception in thread "main" org.apache.lucene.index.MergePolicy$MergeException: java.lang.ArithmeticException: integer overflow at org.apache.lucene.index.ConcurrentMergeScheduler.handleMergeException(ConcurrentMergeScheduler.java:705) at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:685) Caused by: java.lang.ArithmeticException: integer overflow at java.lang.Math.toIntExact(Math.java:1011) at org.apache.lucene.store.ByteBuffersDataInput.sliceBufferList(ByteBuffersDataInput.java:299) at org.apache.lucene.store.ByteBuffersDataInput.slice(ByteBuffersDataInput.java:223) at org.apache.lucene.store.ByteBuffersIndexInput.clone(ByteBuffersIndexInput.java:186) at org.apache.lucene.store.ByteBuffersDirectory$FileEntry.openInput(ByteBuffersDirectory.java:254) at org.apache.lucene.store.ByteBuffersDirectory.openInput(ByteBuffersDirectory.java:223) at org.apache.lucene.store.FilterDirectory.openInput(FilterDirectory.java:100) at org.apache.lucene.store.FilterDirectory.openInput(FilterDirectory.java:100) at org.apache.lucene.store.FilterDirectory.openInput(FilterDirectory.java:100) at org.apache.lucene.store.Directory.openChecksumInput(Directory.java:157) at org.apache.lucene.codecs.lucene50.Lucene50CompoundFormat.write(Lucene50CompoundFormat.java:89) at org.apache.lucene.index.IndexWriter.createCompoundFile(IndexWriter.java:5004) at org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:4517) at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:4075) at org.apache.lucene.index.ConcurrentMergeScheduler.doMerge(ConcurrentMergeScheduler.java:626) at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:663) The exception is caused by a Math.toIntExact made in sliceBufferList in ByteBuffersDataInput. {code:java|title=ByteBuffersDataInput.java|borderStyle=solid} private static List sliceBufferList(List buffers, long offset, long length) { ensureAssumptions(buffers); if (buffers.size() == 1) { ByteBuffer cloned = buffers.get(0).asReadOnlyBuffer(); cloned.position(Math.toIntExact(cloned.position() + offset)); cloned.limit(Math.toIntExact(length + cloned.position())); return Arrays.asList(cloned); } else { long absStart = buffers.get(0).position() + offset; long absEnd = Math.toIntExact(absStart + length); // throws integer overflow ... {code} Removing the Math.toIntExact works but I'm not sure if the logic will still be right since absEnd is used to calculate endOffset after a few lines: {code:java} int endOffset = (int) absEnd & blockMask; {code} Thanks, was: Hi, Once I fixed the bug here, https://issues.apache.org/jira/browse/LUCENE-8624, I encountered another Integer Overflow error in ByteBuffersDataInput: xception in thread "Lucene Merge Thread #1540" Exception in thread "main" org.apache.lucene.index.MergePolicy$MergeException: java.lang.ArithmeticException: integer overflow at org.apache.lucene.index.ConcurrentMergeScheduler.handleMergeException(ConcurrentMergeScheduler.java:705) at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:685) Caused by: java.lang.ArithmeticException: integer overflow at java.lang.Math.toIntExact(Math.java:1011) at org.apache.lucene.store.ByteBuffersDataInput.sliceBufferList(ByteBuffersDataInput.java:299) at org.apache.lucene.store.ByteBuffersDataInput.slice(ByteBuffersDataInput.java:223) at org.apache.lucene.store.ByteBuffersIndexInput.clone(ByteBuffersIndexInput.java:186) at org.apache.lucene.store.ByteBuffersDirectory$FileEntry.openInput(ByteBuffersDirectory.java:254) at org.apache.lucene.store.ByteBuffersDirectory.openInput(ByteBuffersDirectory.java:223) at org.apache.lucene.store.FilterDirectory.openInput(FilterDirectory.java:100) at org.apache.lucene.store.FilterDirectory.openInput(FilterDirectory.java:100) at org.apache.lucene.store.FilterDirectory.openInput(FilterDirectory.java:100) at org.apache.lucene.store.Directory.openChecksumInput(Directory.java:157) at org.apache.lucene.codecs.lucene50.Lucene50CompoundFormat.write(Lucene50CompoundFormat.java:89) at org.apache.lucene.index.IndexWriter.createCompoundFile(IndexWriter.java:5004) at org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:4517) at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:4075) at org.apache.lucene.index.ConcurrentMergeScheduler.doMerge(ConcurrentMergeScheduler.java:626) at
[jira] [Updated] (LUCENE-8625) Integer Overflow in ByteBuffersDataInput
[ https://issues.apache.org/jira/browse/LUCENE-8625?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Mulugeta Mammo updated LUCENE-8625: --- Summary: Integer Overflow in ByteBuffersDataInput (was: Integer Overflow Exception in ByteBuffersDataInpu) > Integer Overflow in ByteBuffersDataInput > > > Key: LUCENE-8625 > URL: https://issues.apache.org/jira/browse/LUCENE-8625 > Project: Lucene - Core > Issue Type: Bug > Components: core/store >Affects Versions: 7.5 >Reporter: Mulugeta Mammo >Priority: Major > Fix For: 7.5 > > > Hi, > Once I fixed the bug here, https://issues.apache.org/jira/browse/LUCENE-8624, > I encountered another Integer Overflow error in ByteBuffersDataInput: > xception in thread "Lucene Merge Thread #1540" Exception in thread "main" > org.apache.lucene.index.MergePolicy$MergeException: > java.lang.ArithmeticException: integer overflow > at > org.apache.lucene.index.ConcurrentMergeScheduler.handleMergeException(ConcurrentMergeScheduler.java:705) > at > org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:685) > Caused by: java.lang.ArithmeticException: integer overflow > at java.lang.Math.toIntExact(Math.java:1011) > at > org.apache.lucene.store.ByteBuffersDataInput.sliceBufferList(ByteBuffersDataInput.java:299) > at > org.apache.lucene.store.ByteBuffersDataInput.slice(ByteBuffersDataInput.java:223) > at > org.apache.lucene.store.ByteBuffersIndexInput.clone(ByteBuffersIndexInput.java:186) > at > org.apache.lucene.store.ByteBuffersDirectory$FileEntry.openInput(ByteBuffersDirectory.java:254) > at > org.apache.lucene.store.ByteBuffersDirectory.openInput(ByteBuffersDirectory.java:223) > at > org.apache.lucene.store.FilterDirectory.openInput(FilterDirectory.java:100) > at > org.apache.lucene.store.FilterDirectory.openInput(FilterDirectory.java:100) > at > org.apache.lucene.store.FilterDirectory.openInput(FilterDirectory.java:100) > at org.apache.lucene.store.Directory.openChecksumInput(Directory.java:157) > at > org.apache.lucene.codecs.lucene50.Lucene50CompoundFormat.write(Lucene50CompoundFormat.java:89) > at > org.apache.lucene.index.IndexWriter.createCompoundFile(IndexWriter.java:5004) > at org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:4517) > at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:4075) > at > org.apache.lucene.index.ConcurrentMergeScheduler.doMerge(ConcurrentMergeScheduler.java:626) > at > org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:663) > The exception is caused by a Math.toIntExact made in sliceBufferList in > ByteBuffersDataInput. > {code:java|title=ByteBuffersDataInput.java|borderStyle=solid} > private static List sliceBufferList(List buffers, > long offset, long length) { > ensureAssumptions(buffers); > if (buffers.size() == 1) { > ByteBuffer cloned = buffers.get(0).asReadOnlyBuffer(); > cloned.position(Math.toIntExact(cloned.position() + offset)); > cloned.limit(Math.toIntExact(length + cloned.position())); > return Arrays.asList(cloned); > } else { > long absStart = buffers.get(0).position() + offset; > long absEnd = Math.toIntExact(absStart + length); // throws integer > overflow > ... > {code} > Removing the Math.toIntExact works but I'm not sure if the logic will still > be right since absEnd is used to calculate endOffset after a few lines: > {code:java} > int endOffset = (int) absEnd & blockMask; > {code} > > Thanks, -- This message was sent by Atlassian JIRA (v7.6.3#76005) - To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org For additional commands, e-mail: dev-h...@lucene.apache.org
[jira] [Updated] (LUCENE-8625) Integer Overflow Exception in ByteBuffersDataInpu
[ https://issues.apache.org/jira/browse/LUCENE-8625?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Mulugeta Mammo updated LUCENE-8625: --- Description: Hi, Once I fixed the bug here, https://issues.apache.org/jira/browse/LUCENE-8624, I encountered another Integer Overflow error in ByteBuffersDataInput: xception in thread "Lucene Merge Thread #1540" Exception in thread "main" org.apache.lucene.index.MergePolicy$MergeException: java.lang.ArithmeticException: integer overflow at org.apache.lucene.index.ConcurrentMergeScheduler.handleMergeException(ConcurrentMergeScheduler.java:705) at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:685) Caused by: java.lang.ArithmeticException: integer overflow at java.lang.Math.toIntExact(Math.java:1011) at org.apache.lucene.store.ByteBuffersDataInput.sliceBufferList(ByteBuffersDataInput.java:299) at org.apache.lucene.store.ByteBuffersDataInput.slice(ByteBuffersDataInput.java:223) at org.apache.lucene.store.ByteBuffersIndexInput.clone(ByteBuffersIndexInput.java:186) at org.apache.lucene.store.ByteBuffersDirectory$FileEntry.openInput(ByteBuffersDirectory.java:254) at org.apache.lucene.store.ByteBuffersDirectory.openInput(ByteBuffersDirectory.java:223) at org.apache.lucene.store.FilterDirectory.openInput(FilterDirectory.java:100) at org.apache.lucene.store.FilterDirectory.openInput(FilterDirectory.java:100) at org.apache.lucene.store.FilterDirectory.openInput(FilterDirectory.java:100) at org.apache.lucene.store.Directory.openChecksumInput(Directory.java:157) at org.apache.lucene.codecs.lucene50.Lucene50CompoundFormat.write(Lucene50CompoundFormat.java:89) at org.apache.lucene.index.IndexWriter.createCompoundFile(IndexWriter.java:5004) at org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:4517) at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:4075) at org.apache.lucene.index.ConcurrentMergeScheduler.doMerge(ConcurrentMergeScheduler.java:626) at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:663) The exception is caused by a Math.toIntExact made in sliceBufferList in ByteBuffersDataInput. {code:java|title=ByteBuffersDataInput.java|borderStyle=solid} private static List sliceBufferList(List buffers, long offset, long length) { ensureAssumptions(buffers); if (buffers.size() == 1) { ByteBuffer cloned = buffers.get(0).asReadOnlyBuffer(); cloned.position(Math.toIntExact(cloned.position() + offset)); cloned.limit(Math.toIntExact(length + cloned.position())); return Arrays.asList(cloned); } else { long absStart = buffers.get(0).position() + offset; long absEnd = Math.toIntExact(absStart + length); // throws integer overflow ... {code} Removing the Math.toIntExact works but I'm not sure if the logic will still be right since absEnd is used to calculate endOffset after a few lines: {code:java} int endOffset = (int) absEnd & blockMask; {code} Thanks, was: Hi, Once I fixed the bug here, https://issues.apache.org/jira/browse/LUCENE-8624, I encountered another Integer Overflow error in ByteBuffersDataInput: xception in thread "Lucene Merge Thread #1540" Exception in thread "main" org.apache.lucene.index.MergePolicy$MergeException: java.lang.ArithmeticException: integer overflow at org.apache.lucene.index.ConcurrentMergeScheduler.handleMergeException(ConcurrentMergeScheduler.java:705) at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:685) Caused by: java.lang.ArithmeticException: integer overflow at java.lang.Math.toIntExact(Math.java:1011) at org.apache.lucene.store.ByteBuffersDataInput.sliceBufferList(ByteBuffersDataInput.java:299) at org.apache.lucene.store.ByteBuffersDataInput.slice(ByteBuffersDataInput.java:223) at org.apache.lucene.store.ByteBuffersIndexInput.clone(ByteBuffersIndexInput.java:186) at org.apache.lucene.store.ByteBuffersDirectory$FileEntry.openInput(ByteBuffersDirectory.java:254) at org.apache.lucene.store.ByteBuffersDirectory.openInput(ByteBuffersDirectory.java:223) at org.apache.lucene.store.FilterDirectory.openInput(FilterDirectory.java:100) at org.apache.lucene.store.FilterDirectory.openInput(FilterDirectory.java:100) at org.apache.lucene.store.FilterDirectory.openInput(FilterDirectory.java:100) at org.apache.lucene.store.Directory.openChecksumInput(Directory.java:157) at org.apache.lucene.codecs.lucene50.Lucene50CompoundFormat.write(Lucene50CompoundFormat.java:89) at org.apache.lucene.index.IndexWriter.createCompoundFile(IndexWriter.java:5004) at org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:4517) at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:4075) at org.apache.lucene.index.ConcurrentMergeScheduler.doMerge(ConcurrentMergeScheduler.java:626) at
[jira] [Created] (LUCENE-8625) Integer Overflow Exception in ByteBuffersDataInpu
Mulugeta Mammo created LUCENE-8625: -- Summary: Integer Overflow Exception in ByteBuffersDataInpu Key: LUCENE-8625 URL: https://issues.apache.org/jira/browse/LUCENE-8625 Project: Lucene - Core Issue Type: Bug Components: core/store Affects Versions: 7.5 Reporter: Mulugeta Mammo Fix For: 7.5 Hi, Once I fixed the bug here, https://issues.apache.org/jira/browse/LUCENE-8624, I encountered another Integer Overflow error in ByteBuffersDataInput: xception in thread "Lucene Merge Thread #1540" Exception in thread "main" org.apache.lucene.index.MergePolicy$MergeException: java.lang.ArithmeticException: integer overflow at org.apache.lucene.index.ConcurrentMergeScheduler.handleMergeException(ConcurrentMergeScheduler.java:705) at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:685) Caused by: java.lang.ArithmeticException: integer overflow at java.lang.Math.toIntExact(Math.java:1011) at org.apache.lucene.store.ByteBuffersDataInput.sliceBufferList(ByteBuffersDataInput.java:299) at org.apache.lucene.store.ByteBuffersDataInput.slice(ByteBuffersDataInput.java:223) at org.apache.lucene.store.ByteBuffersIndexInput.clone(ByteBuffersIndexInput.java:186) at org.apache.lucene.store.ByteBuffersDirectory$FileEntry.openInput(ByteBuffersDirectory.java:254) at org.apache.lucene.store.ByteBuffersDirectory.openInput(ByteBuffersDirectory.java:223) at org.apache.lucene.store.FilterDirectory.openInput(FilterDirectory.java:100) at org.apache.lucene.store.FilterDirectory.openInput(FilterDirectory.java:100) at org.apache.lucene.store.FilterDirectory.openInput(FilterDirectory.java:100) at org.apache.lucene.store.Directory.openChecksumInput(Directory.java:157) at org.apache.lucene.codecs.lucene50.Lucene50CompoundFormat.write(Lucene50CompoundFormat.java:89) at org.apache.lucene.index.IndexWriter.createCompoundFile(IndexWriter.java:5004) at org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:4517) at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:4075) at org.apache.lucene.index.ConcurrentMergeScheduler.doMerge(ConcurrentMergeScheduler.java:626) at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:663) The exception is caused by a Math.toIntExact made in sliceBufferList in ByteBuffersDataInput. {{{code:title=ByteBuffersDataInput.java|borderStyle=solid}}} private static List sliceBufferList(List buffers, long offset, long length) { ensureAssumptions(buffers); if (buffers.size() == 1) { ByteBuffer cloned = buffers.get(0).asReadOnlyBuffer(); cloned.position(Math.toIntExact(cloned.position() + offset)); cloned.limit(Math.toIntExact(length + cloned.position())); return Arrays.asList(cloned); } else { long absStart = buffers.get(0).position() + offset; long absEnd = Math.toIntExact(absStart + length); // throws integer overflow ... {{{code}}} Removing the Math.toIntExact works but I'm not sure if the logic will still be right since absEnd is used to calculate endOffset: {code:java} int endOffset = (int) absEnd & blockMask; {code} Thanks, -- This message was sent by Atlassian JIRA (v7.6.3#76005) - To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org For additional commands, e-mail: dev-h...@lucene.apache.org
[jira] [Created] (LUCENE-8624) ByteBuffersDataOutput Integer Overflow
Mulugeta Mammo created LUCENE-8624: -- Summary: ByteBuffersDataOutput Integer Overflow Key: LUCENE-8624 URL: https://issues.apache.org/jira/browse/LUCENE-8624 Project: Lucene - Core Issue Type: Bug Components: core/store Affects Versions: 7.5 Reporter: Mulugeta Mammo Fix For: 7.5 Hi, When indexing large data sets with ByteBuffersDirectory, an exception like the below is thrown: {{}}Caused by: java.lang.IllegalArgumentException: cannot write negative vLong (got: -4294888321) at org.apache.lucene.store.DataOutput.writeVLong(DataOutput.java:225) at org.apache.lucene.codecs.lucene50.Lucene50SkipWriter.writeSkipData(Lucene50SkipWriter.java:182) at org.apache.lucene.codecs.MultiLevelSkipListWriter.bufferSkip(MultiLevelSkipListWriter.java:143) at org.apache.lucene.codecs.lucene50.Lucene50SkipWriter.bufferSkip(Lucene50SkipWriter.java:162) at org.apache.lucene.codecs.lucene50.Lucene50PostingsWriter.startDoc(Lucene50PostingsWriter.java:228) at org.apache.lucene.codecs.PushPostingsWriterBase.writeTerm(PushPostingsWriterBase.java:148) at org.apache.lucene.codecs.blocktree.BlockTreeTermsWriter$TermsWriter.write(BlockTreeTermsWriter.java:865) at org.apache.lucene.codecs.blocktree.BlockTreeTermsWriter.write(BlockTreeTermsWriter.java:344) at org.apache.lucene.codecs.FieldsConsumer.merge(FieldsConsumer.java:105) at org.apache.lucene.codecs.perfield.PerFieldPostingsFormat$FieldsWriter.merge(PerFieldPostingsFormat.java:169) at org.apache.lucene.index.SegmentMerger.mergeTerms(SegmentMerger.java:244) at org.apache.lucene.index.SegmentMerger.merge(SegmentMerger.java:139) at org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:4453) at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:4075) {{The exception is caused by an integer overflow while calling getFilePointer() in Lucene50PostingsWriter, which eventually calls the size() method in ByteBuffersDataOutput.}} {{{code:title=ByteBuffersDataOutput.java|borderStyle=solid} }} public long size() { long size = 0; int blockCount = blocks.size(); if (blockCount >= 1) { {color:#FF}int fullBlockSize = (blockCount - 1) * blockSize();{color} int lastBlockSize = blocks.getLast().position(); size = fullBlockSize + lastBlockSize; } return size; } {code} In my case, I had a blockCount = 65 and a blockSize() = 33554432 which overflows fullBlockSize. The fix: {{{code:title=ByteBuffersDataOutput.java|borderStyle=solid}}} public long size() { long size = 0; int blockCount = blocks.size(); if (blockCount >= 1) { {color:#FF}long fullBlockSize = 1L * (blockCount - 1) * blockSize();{color} int lastBlockSize = blocks.getLast().position(); size = fullBlockSize + lastBlockSize; } return size; } {code} Thanks -- This message was sent by Atlassian JIRA (v7.6.3#76005) - To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org For additional commands, e-mail: dev-h...@lucene.apache.org
[jira] [Updated] (LUCENE-8624) ByteBuffersDataOutput Integer Overflow
[ https://issues.apache.org/jira/browse/LUCENE-8624?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Mulugeta Mammo updated LUCENE-8624: --- Description: Hi, When indexing large data sets with ByteBuffersDirectory, an exception like the below is thrown: {{}}Caused by: java.lang.IllegalArgumentException: cannot write negative vLong (got: -4294888321) at org.apache.lucene.store.DataOutput.writeVLong(DataOutput.java:225) at org.apache.lucene.codecs.lucene50.Lucene50SkipWriter.writeSkipData(Lucene50SkipWriter.java:182) at org.apache.lucene.codecs.MultiLevelSkipListWriter.bufferSkip(MultiLevelSkipListWriter.java:143) at org.apache.lucene.codecs.lucene50.Lucene50SkipWriter.bufferSkip(Lucene50SkipWriter.java:162) at org.apache.lucene.codecs.lucene50.Lucene50PostingsWriter.startDoc(Lucene50PostingsWriter.java:228) at org.apache.lucene.codecs.PushPostingsWriterBase.writeTerm(PushPostingsWriterBase.java:148) at org.apache.lucene.codecs.blocktree.BlockTreeTermsWriter$TermsWriter.write(BlockTreeTermsWriter.java:865) at org.apache.lucene.codecs.blocktree.BlockTreeTermsWriter.write(BlockTreeTermsWriter.java:344) at org.apache.lucene.codecs.FieldsConsumer.merge(FieldsConsumer.java:105) at org.apache.lucene.codecs.perfield.PerFieldPostingsFormat$FieldsWriter.merge(PerFieldPostingsFormat.java:169) at org.apache.lucene.index.SegmentMerger.mergeTerms(SegmentMerger.java:244) at org.apache.lucene.index.SegmentMerger.merge(SegmentMerger.java:139) at org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:4453) at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:4075) {{The exception is caused by an integer overflow while calling getFilePointer() in Lucene50PostingsWriter, which eventually calls the size() method in ByteBuffersDataOutput.}} {code:java|title=ByteBuffersDataOutput.java|borderStyle=solid} public long size() { long size = 0; int blockCount = blocks.size(); if (blockCount >= 1) { int fullBlockSize = (blockCount - 1) * blockSize(); int lastBlockSize = blocks.getLast().position(); size = fullBlockSize + lastBlockSize; } return size; } {code} In my case, I had a blockCount = 65 and a blockSize() = 33554432 which overflows fullBlockSize. The fix: {code:java|title=ByteBuffersDataOutput.java|borderStyle=solid} public long size() { long size = 0; int blockCount = blocks.size(); if (blockCount >= 1) { long fullBlockSize = 1L * (blockCount - 1) * blockSize(); int lastBlockSize = blocks.getLast().position(); size = fullBlockSize + lastBlockSize; } return size; } {code} Thanks was: Hi, When indexing large data sets with ByteBuffersDirectory, an exception like the below is thrown: {{}}Caused by: java.lang.IllegalArgumentException: cannot write negative vLong (got: -4294888321) at org.apache.lucene.store.DataOutput.writeVLong(DataOutput.java:225) at org.apache.lucene.codecs.lucene50.Lucene50SkipWriter.writeSkipData(Lucene50SkipWriter.java:182) at org.apache.lucene.codecs.MultiLevelSkipListWriter.bufferSkip(MultiLevelSkipListWriter.java:143) at org.apache.lucene.codecs.lucene50.Lucene50SkipWriter.bufferSkip(Lucene50SkipWriter.java:162) at org.apache.lucene.codecs.lucene50.Lucene50PostingsWriter.startDoc(Lucene50PostingsWriter.java:228) at org.apache.lucene.codecs.PushPostingsWriterBase.writeTerm(PushPostingsWriterBase.java:148) at org.apache.lucene.codecs.blocktree.BlockTreeTermsWriter$TermsWriter.write(BlockTreeTermsWriter.java:865) at org.apache.lucene.codecs.blocktree.BlockTreeTermsWriter.write(BlockTreeTermsWriter.java:344) at org.apache.lucene.codecs.FieldsConsumer.merge(FieldsConsumer.java:105) at org.apache.lucene.codecs.perfield.PerFieldPostingsFormat$FieldsWriter.merge(PerFieldPostingsFormat.java:169) at org.apache.lucene.index.SegmentMerger.mergeTerms(SegmentMerger.java:244) at org.apache.lucene.index.SegmentMerger.merge(SegmentMerger.java:139) at org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:4453) at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:4075) {{The exception is caused by an integer overflow while calling getFilePointer() in Lucene50PostingsWriter, which eventually calls the size() method in ByteBuffersDataOutput.}} {code:java|title=ByteBuffersDataOutput.java|borderStyle=solid} }} public long size() { long size = 0; int blockCount = blocks.size(); if (blockCount >= 1) { {color:#FF}int fullBlockSize = (blockCount - 1) * blockSize();{color} int lastBlockSize = blocks.getLast().position(); size = fullBlockSize + lastBlockSize; } return size; } {code} In my case, I had a blockCount = 65 and a blockSize() = 33554432 which overflows fullBlockSize. The fix: {code:java|title=ByteBuffersDataOutput.java|borderStyle=solid} }} public long size() { long size = 0; int blockCount = blocks.size(); if (blockCount >= 1) { {color:#FF}long fullBlockSize = 1L * (blockCount - 1) * blockSize();{color} int lastBlockSize =
[jira] [Updated] (LUCENE-8624) ByteBuffersDataOutput Integer Overflow
[ https://issues.apache.org/jira/browse/LUCENE-8624?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Mulugeta Mammo updated LUCENE-8624: --- Description: Hi, When indexing large data sets with ByteBuffersDirectory, an exception like the below is thrown: Caused by: java.lang.IllegalArgumentException: cannot write negative vLong (got: -4294888321) at org.apache.lucene.store.DataOutput.writeVLong(DataOutput.java:225) at org.apache.lucene.codecs.lucene50.Lucene50SkipWriter.writeSkipData(Lucene50SkipWriter.java:182) at org.apache.lucene.codecs.MultiLevelSkipListWriter.bufferSkip(MultiLevelSkipListWriter.java:143) at org.apache.lucene.codecs.lucene50.Lucene50SkipWriter.bufferSkip(Lucene50SkipWriter.java:162) at org.apache.lucene.codecs.lucene50.Lucene50PostingsWriter.startDoc(Lucene50PostingsWriter.java:228) at org.apache.lucene.codecs.PushPostingsWriterBase.writeTerm(PushPostingsWriterBase.java:148) at org.apache.lucene.codecs.blocktree.BlockTreeTermsWriter$TermsWriter.write(BlockTreeTermsWriter.java:865) at org.apache.lucene.codecs.blocktree.BlockTreeTermsWriter.write(BlockTreeTermsWriter.java:344) at org.apache.lucene.codecs.FieldsConsumer.merge(FieldsConsumer.java:105) at org.apache.lucene.codecs.perfield.PerFieldPostingsFormat$FieldsWriter.merge(PerFieldPostingsFormat.java:169) at org.apache.lucene.index.SegmentMerger.mergeTerms(SegmentMerger.java:244) at org.apache.lucene.index.SegmentMerger.merge(SegmentMerger.java:139) at org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:4453) at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:4075) {{The exception is caused by an integer overflow while calling getFilePointer() in Lucene50PostingsWriter, which eventually calls the size() method in ByteBuffersDataOutput.}} {code:java|title=ByteBuffersDataOutput.java|borderStyle=solid} public long size() { long size = 0; int blockCount = blocks.size(); if (blockCount >= 1) { int fullBlockSize = (blockCount - 1) * blockSize(); int lastBlockSize = blocks.getLast().position(); size = fullBlockSize + lastBlockSize; } return size; } {code} In my case, I had a blockCount = 65 and a blockSize() = 33554432 which overflows fullBlockSize. The fix: {code:java|title=ByteBuffersDataOutput.java|borderStyle=solid} public long size() { long size = 0; int blockCount = blocks.size(); if (blockCount >= 1) { long fullBlockSize = 1L * (blockCount - 1) * blockSize(); int lastBlockSize = blocks.getLast().position(); size = fullBlockSize + lastBlockSize; } return size; } {code} Thanks was: Hi, When indexing large data sets with ByteBuffersDirectory, an exception like the below is thrown: {{}}Caused by: java.lang.IllegalArgumentException: cannot write negative vLong (got: -4294888321) at org.apache.lucene.store.DataOutput.writeVLong(DataOutput.java:225) at org.apache.lucene.codecs.lucene50.Lucene50SkipWriter.writeSkipData(Lucene50SkipWriter.java:182) at org.apache.lucene.codecs.MultiLevelSkipListWriter.bufferSkip(MultiLevelSkipListWriter.java:143) at org.apache.lucene.codecs.lucene50.Lucene50SkipWriter.bufferSkip(Lucene50SkipWriter.java:162) at org.apache.lucene.codecs.lucene50.Lucene50PostingsWriter.startDoc(Lucene50PostingsWriter.java:228) at org.apache.lucene.codecs.PushPostingsWriterBase.writeTerm(PushPostingsWriterBase.java:148) at org.apache.lucene.codecs.blocktree.BlockTreeTermsWriter$TermsWriter.write(BlockTreeTermsWriter.java:865) at org.apache.lucene.codecs.blocktree.BlockTreeTermsWriter.write(BlockTreeTermsWriter.java:344) at org.apache.lucene.codecs.FieldsConsumer.merge(FieldsConsumer.java:105) at org.apache.lucene.codecs.perfield.PerFieldPostingsFormat$FieldsWriter.merge(PerFieldPostingsFormat.java:169) at org.apache.lucene.index.SegmentMerger.mergeTerms(SegmentMerger.java:244) at org.apache.lucene.index.SegmentMerger.merge(SegmentMerger.java:139) at org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:4453) at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:4075) {{The exception is caused by an integer overflow while calling getFilePointer() in Lucene50PostingsWriter, which eventually calls the size() method in ByteBuffersDataOutput.}} {code:java|title=ByteBuffersDataOutput.java|borderStyle=solid} public long size() { long size = 0; int blockCount = blocks.size(); if (blockCount >= 1) { int fullBlockSize = (blockCount - 1) * blockSize(); int lastBlockSize = blocks.getLast().position(); size = fullBlockSize + lastBlockSize; } return size; } {code} In my case, I had a blockCount = 65 and a blockSize() = 33554432 which overflows fullBlockSize. The fix: {code:java|title=ByteBuffersDataOutput.java|borderStyle=solid} public long size() { long size = 0; int blockCount = blocks.size(); if (blockCount >= 1) { long fullBlockSize = 1L * (blockCount - 1) * blockSize(); int lastBlockSize = blocks.getLast().position(); size = fullBlockSize +
[jira] [Updated] (LUCENE-8624) ByteBuffersDataOutput Integer Overflow
[ https://issues.apache.org/jira/browse/LUCENE-8624?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Mulugeta Mammo updated LUCENE-8624: --- Description: Hi, When indexing large data sets with ByteBuffersDirectory, an exception like the below is thrown: {{}}Caused by: java.lang.IllegalArgumentException: cannot write negative vLong (got: -4294888321) at org.apache.lucene.store.DataOutput.writeVLong(DataOutput.java:225) at org.apache.lucene.codecs.lucene50.Lucene50SkipWriter.writeSkipData(Lucene50SkipWriter.java:182) at org.apache.lucene.codecs.MultiLevelSkipListWriter.bufferSkip(MultiLevelSkipListWriter.java:143) at org.apache.lucene.codecs.lucene50.Lucene50SkipWriter.bufferSkip(Lucene50SkipWriter.java:162) at org.apache.lucene.codecs.lucene50.Lucene50PostingsWriter.startDoc(Lucene50PostingsWriter.java:228) at org.apache.lucene.codecs.PushPostingsWriterBase.writeTerm(PushPostingsWriterBase.java:148) at org.apache.lucene.codecs.blocktree.BlockTreeTermsWriter$TermsWriter.write(BlockTreeTermsWriter.java:865) at org.apache.lucene.codecs.blocktree.BlockTreeTermsWriter.write(BlockTreeTermsWriter.java:344) at org.apache.lucene.codecs.FieldsConsumer.merge(FieldsConsumer.java:105) at org.apache.lucene.codecs.perfield.PerFieldPostingsFormat$FieldsWriter.merge(PerFieldPostingsFormat.java:169) at org.apache.lucene.index.SegmentMerger.mergeTerms(SegmentMerger.java:244) at org.apache.lucene.index.SegmentMerger.merge(SegmentMerger.java:139) at org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:4453) at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:4075) {{The exception is caused by an integer overflow while calling getFilePointer() in Lucene50PostingsWriter, which eventually calls the size() method in ByteBuffersDataOutput.}} {code:java|title=ByteBuffersDataOutput.java|borderStyle=solid} }} public long size() { long size = 0; int blockCount = blocks.size(); if (blockCount >= 1) { {color:#FF}int fullBlockSize = (blockCount - 1) * blockSize();{color} int lastBlockSize = blocks.getLast().position(); size = fullBlockSize + lastBlockSize; } return size; } {code} In my case, I had a blockCount = 65 and a blockSize() = 33554432 which overflows fullBlockSize. The fix: {code:java|title=ByteBuffersDataOutput.java|borderStyle=solid} }} public long size() { long size = 0; int blockCount = blocks.size(); if (blockCount >= 1) { {color:#FF}long fullBlockSize = 1L * (blockCount - 1) * blockSize();{color} int lastBlockSize = blocks.getLast().position(); size = fullBlockSize + lastBlockSize; } return size; } {code} Thanks was: Hi, When indexing large data sets with ByteBuffersDirectory, an exception like the below is thrown: {{}}Caused by: java.lang.IllegalArgumentException: cannot write negative vLong (got: -4294888321) at org.apache.lucene.store.DataOutput.writeVLong(DataOutput.java:225) at org.apache.lucene.codecs.lucene50.Lucene50SkipWriter.writeSkipData(Lucene50SkipWriter.java:182) at org.apache.lucene.codecs.MultiLevelSkipListWriter.bufferSkip(MultiLevelSkipListWriter.java:143) at org.apache.lucene.codecs.lucene50.Lucene50SkipWriter.bufferSkip(Lucene50SkipWriter.java:162) at org.apache.lucene.codecs.lucene50.Lucene50PostingsWriter.startDoc(Lucene50PostingsWriter.java:228) at org.apache.lucene.codecs.PushPostingsWriterBase.writeTerm(PushPostingsWriterBase.java:148) at org.apache.lucene.codecs.blocktree.BlockTreeTermsWriter$TermsWriter.write(BlockTreeTermsWriter.java:865) at org.apache.lucene.codecs.blocktree.BlockTreeTermsWriter.write(BlockTreeTermsWriter.java:344) at org.apache.lucene.codecs.FieldsConsumer.merge(FieldsConsumer.java:105) at org.apache.lucene.codecs.perfield.PerFieldPostingsFormat$FieldsWriter.merge(PerFieldPostingsFormat.java:169) at org.apache.lucene.index.SegmentMerger.mergeTerms(SegmentMerger.java:244) at org.apache.lucene.index.SegmentMerger.merge(SegmentMerger.java:139) at org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:4453) at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:4075) {{The exception is caused by an integer overflow while calling getFilePointer() in Lucene50PostingsWriter, which eventually calls the size() method in ByteBuffersDataOutput.}} {{{code:title=ByteBuffersDataOutput.java|borderStyle=solid} }} public long size() { long size = 0; int blockCount = blocks.size(); if (blockCount >= 1) { {color:#FF}int fullBlockSize = (blockCount - 1) * blockSize();{color} int lastBlockSize = blocks.getLast().position(); size = fullBlockSize + lastBlockSize; } return size; } {code} In my case, I had a blockCount = 65 and a blockSize() = 33554432 which overflows fullBlockSize. The fix: {{{code:title=ByteBuffersDataOutput.java|borderStyle=solid}}} public long size() { long size = 0; int blockCount = blocks.size(); if (blockCount >= 1) { {color:#FF}long fullBlockSize = 1L * (blockCount - 1)