From 6b307d6d595cf9d26bd904bb48097b45318017a1 Mon Sep 17 00:00:00 2001 From: orbiter Date: Fri, 19 Jun 2009 21:35:44 +0000 Subject: [PATCH] more tolerance for corrupted index entries in exported row sets git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@6099 6c8d7289-2bf4-0310-a012-ef5d649a1542 --- source/de/anomic/kelondro/index/RowSet.java | 25 +++++++-------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/source/de/anomic/kelondro/index/RowSet.java b/source/de/anomic/kelondro/index/RowSet.java index 35f51ac53..bda0c4c1c 100644 --- a/source/de/anomic/kelondro/index/RowSet.java +++ b/source/de/anomic/kelondro/index/RowSet.java @@ -24,8 +24,6 @@ package de.anomic.kelondro.index; -import java.io.DataInput; -import java.io.IOException; import java.util.Iterator; import java.util.Random; @@ -63,26 +61,19 @@ public class RowSet extends RowCollection implements ObjectIndex, Iterable= 14 : "b.length = " + b.length; + assert b.length >= exportOverheadSize : "b.length = " + b.length; + if (b.length < exportOverheadSize) return new RowSet(rowdef, 0); final int size = (int) NaturalOrder.decodeLong(b, 0, 4); + assert size >= 0 : "size = " + size; + if (size < 0) return new RowSet(rowdef, 0); final int orderbound = (int) NaturalOrder.decodeLong(b, 10, 4); + assert orderbound >= 0 : "orderbound = " + orderbound; + if (orderbound < 0) return new RowSet(rowdef, 0); final byte[] chunkcache = new byte[size * rowdef.objectsize]; assert b.length - exportOverheadSize == size * rowdef.objectsize; - System.arraycopy(b, 14, chunkcache, 0, chunkcache.length); + if (b.length - exportOverheadSize != size * rowdef.objectsize) return new RowSet(rowdef, 0); + System.arraycopy(b, exportOverheadSize, chunkcache, 0, chunkcache.length); return new RowSet(rowdef, size, chunkcache, orderbound); }