From: Wolfgang M. M. <wol...@us...> - 2004-07-28 17:40:23
|
Update of /cvsroot/exist/eXist-1.0/src/org/exist/storage/store In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22975/src/org/exist/storage/store Modified Files: DOMFile.java Log Message: ArrayIndexOutOfBounds exception when loading node value from overflow page. Index: DOMFile.java =================================================================== RCS file: /cvsroot/exist/eXist-1.0/src/org/exist/storage/store/DOMFile.java,v retrieving revision 1.41 retrieving revision 1.42 diff -C2 -d -r1.41 -r1.42 *** DOMFile.java 19 Jul 2004 13:06:25 -0000 1.41 --- DOMFile.java 28 Jul 2004 17:40:05 -0000 1.42 *************** *** 722,726 **** query(query, cb); } catch (TerminatedException e) { ! // Should never happen hear LOG.warn("Method terminated"); } --- 722,726 ---- query(query, cb); } catch (TerminatedException e) { ! // Should never happen here LOG.warn("Method terminated"); } *************** *** 1192,1200 **** public void removeAll(long p) { ! // StringBuffer debug = new StringBuffer(); ! // debug.append("Removed pages: "); long pnum = StorageAddress.pageFromPointer(p); while(-1 < pnum) { ! // debug.append(' ').append(pnum); DOMPage page = getCurrentPage(pnum); pnum = page.getPageHeader().getNextDataPage(); --- 1192,1200 ---- public void removeAll(long p) { ! StringBuffer debug = new StringBuffer(); ! debug.append("Removed pages: "); long pnum = StorageAddress.pageFromPointer(p); while(-1 < pnum) { ! debug.append(' ').append(pnum); DOMPage page = getCurrentPage(pnum); pnum = page.getPageHeader().getNextDataPage(); *************** *** 1213,1217 **** } } ! // LOG.debug(debug.toString()); } --- 1213,1217 ---- } } ! LOG.debug(debug.toString()); } *************** *** 1227,1230 **** --- 1227,1231 ---- pnum = page.getPageHeader().getNextDataPage(); } + buf.append("; Document metadata at " +StorageAddress.toString(doc.getAddress())); return buf.toString(); } *************** *** 1382,1386 **** foundNext = true; } while(!foundNext); ! short len = ByteConversion.byteToShort(rec.page.data, rec.offset); rec.offset += 2; if(ItemId.isRelocated(rec.tid)) --- 1383,1387 ---- foundNext = true; } while(!foundNext); ! int len = ByteConversion.byteToShort(rec.page.data, rec.offset); rec.offset += 2; if(ItemId.isRelocated(rec.tid)) *************** *** 1392,1396 **** rec.offset); data = getOverflowValue(op); ! len = (short) data.length; readOffset = 0; rec.offset += 8; --- 1393,1397 ---- rec.offset); data = getOverflowValue(op); ! len = data.length; readOffset = 0; rec.offset += 8; *************** *** 1399,1413 **** switch (type) { case Node.ELEMENT_NODE: ! final int children = ByteConversion.byteToInt(data, readOffset + 1); ! final byte attrSizeType = (byte) ((data[readOffset] & 0x0C) >> 0x2); ! final short attributes = (short) Signatures.read(attrSizeType, ! data, readOffset + 5); ! rec.offset += len + 2; ! for (int i = 0; i < children; i++) { ! getNodeValue(os, rec, false); ! //if (children - attributes > 1) ! // os.write((byte) 0x20); ! } ! return; case Node.TEXT_NODE: os.write(data, readOffset + 1, len - 1); --- 1400,1414 ---- switch (type) { case Node.ELEMENT_NODE: ! final int children = ByteConversion.byteToInt(data, readOffset + 1); ! final byte attrSizeType = (byte) ((data[readOffset] & 0x0C) >> 0x2); ! final short attributes = (short) Signatures.read(attrSizeType, ! data, readOffset + 5); ! rec.offset += len + 2; ! for (int i = 0; i < children; i++) { ! getNodeValue(os, rec, false); ! if (children - attributes > 1) ! os.write((byte) 0x20); ! } ! return; case Node.TEXT_NODE: os.write(data, readOffset + 1, len - 1); *************** *** 1430,1434 **** break; } ! rec.offset += len + 2; } --- 1431,1436 ---- break; } ! if(len != OVERFLOW) ! rec.offset += len + 2; } |