diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ffed3a254..e1adfb493 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/org/crosswire/jsword/book/sword/DataEntry.java b/src/main/java/org/crosswire/jsword/book/sword/DataEntry.java index bb3751c3b..6903a67f0 100644 --- a/src/main/java/org/crosswire/jsword/book/sword/DataEntry.java +++ b/src/main/java/org/crosswire/jsword/book/sword/DataEntry.java @@ -163,7 +163,7 @@ public String getRawText(byte[] cipherKey) { */ public DataIndex getBlockIndex() { int start = keyEnd + 1; - return new DataIndex(SwordUtil.decodeLittleEndian32(data, start), SwordUtil.decodeLittleEndian32(data, start + 4)); + return new DataIndex(SwordUtil.decodeLittleEndian32(data, start) & 0xFFFFFFFFL, SwordUtil.decodeLittleEndian32(data, start + 4)); } /** diff --git a/src/main/java/org/crosswire/jsword/book/sword/DataIndex.java b/src/main/java/org/crosswire/jsword/book/sword/DataIndex.java index 35e88e1e2..6a27664ef 100644 --- a/src/main/java/org/crosswire/jsword/book/sword/DataIndex.java +++ b/src/main/java/org/crosswire/jsword/book/sword/DataIndex.java @@ -35,7 +35,7 @@ public class DataIndex { * @param size * The number of bytes to read from the file. */ - public DataIndex(int offset, int size) { + public DataIndex(long offset, int size) { this.offset = offset; this.size = size; } @@ -43,7 +43,7 @@ public DataIndex(int offset, int size) { /** * @return the offset */ - public int getOffset() { + public long getOffset() { return offset; } @@ -54,6 +54,6 @@ public int getSize() { return size; } - private int offset; + private long offset; private int size; } diff --git a/src/main/java/org/crosswire/jsword/book/sword/RawBackend.java b/src/main/java/org/crosswire/jsword/book/sword/RawBackend.java index 4dfd74457..143672e7c 100644 --- a/src/main/java/org/crosswire/jsword/book/sword/RawBackend.java +++ b/src/main/java/org/crosswire/jsword/book/sword/RawBackend.java @@ -247,7 +247,7 @@ protected DataIndex getIndex(RandomAccessFile raf, long entry) throws IOExceptio return new DataIndex(0, 0); } - int entryOffset = SwordUtil.decodeLittleEndian32(buffer, 0); + long entryOffset = SwordUtil.decodeLittleEndian32(buffer, 0) & 0xFFFFFFFFL; int entrySize = -1; switch (datasize) { case 2: diff --git a/src/main/java/org/crosswire/jsword/book/sword/RawLDBackend.java b/src/main/java/org/crosswire/jsword/book/sword/RawLDBackend.java index e2c25945b..bbd938bc5 100644 --- a/src/main/java/org/crosswire/jsword/book/sword/RawLDBackend.java +++ b/src/main/java/org/crosswire/jsword/book/sword/RawLDBackend.java @@ -214,7 +214,7 @@ public int getRawTextLength(Key key) { protected DataIndex getIndex(RawLDBackendState state, long entry) throws IOException { // Read the offset and size for this key from the index byte[] buffer = SwordUtil.readRAF(state.getIdxRaf(), entry * entrysize, entrysize); - int entryOffset = SwordUtil.decodeLittleEndian32(buffer, 0); + long entryOffset = SwordUtil.decodeLittleEndian32(buffer, 0) & 0xFFFFFFFFL; int entrySize = -1; switch (datasize) { case 2: @@ -534,7 +534,7 @@ public void dumpIdxRaf() { System.out.println("index\toffset\tsize\tkey\tvalue"); for (long i = 0; i < end; ++i) { DataIndex index = getIndex(state, i); - int offset = index.getOffset(); + long offset = index.getOffset(); int size = index.getSize(); buf.setLength(0); buf.append(i); @@ -585,7 +585,7 @@ public void toIMP() { StringBuilder buf = new StringBuilder(); for (long i = 0; i < end; ++i) { DataIndex index = getIndex(state, i); - int offset = index.getOffset(); + long offset = index.getOffset(); int size = index.getSize(); buf.setLength(0); buf.append("$$$"); diff --git a/src/main/java/org/crosswire/jsword/book/sword/ZLDBackend.java b/src/main/java/org/crosswire/jsword/book/sword/ZLDBackend.java index 90b3f3679..fa490bf71 100644 --- a/src/main/java/org/crosswire/jsword/book/sword/ZLDBackend.java +++ b/src/main/java/org/crosswire/jsword/book/sword/ZLDBackend.java @@ -84,7 +84,7 @@ protected DataEntry getEntry(RawLDBackendState fileState, DataEntry entry) { return new DataEntry(entry.getName(), new byte[0], entry.getCharset()); } - int blockStart = SwordUtil.decodeLittleEndian32(temp, 0); + long blockStart = SwordUtil.decodeLittleEndian32(temp, 0) & 0xFFFFFFFFL; int blockSize = SwordUtil.decodeLittleEndian32(temp, 4); temp = SwordUtil.readRAF(state.getZdtRaf(), blockStart, blockSize); @@ -147,7 +147,7 @@ public void dumpIdxRaf() { System.out.println("index\toffset\tsize\tkey\tvalue"); for (long i = 0; i < end; ++i) { DataIndex index = getIndex(state, i); - int offset = index.getOffset(); + long offset = index.getOffset(); int size = index.getSize(); buf.setLength(0); buf.append(i); diff --git a/src/main/java/org/crosswire/jsword/book/sword/ZVerseBackend.java b/src/main/java/org/crosswire/jsword/book/sword/ZVerseBackend.java index 3eb8e1afd..387fdd9b7 100644 --- a/src/main/java/org/crosswire/jsword/book/sword/ZVerseBackend.java +++ b/src/main/java/org/crosswire/jsword/book/sword/ZVerseBackend.java @@ -334,7 +334,7 @@ public String readRawContent(ZVerseBackendState rafBook, Key key) throws IOExcep // The data is little endian - extract the blockNum, verseStart // and // verseSize - final long blockNum = SwordUtil.decodeLittleEndian32(temp, 0); + final long blockNum = SwordUtil.decodeLittleEndian32(temp, 0) & 0xFFFFFFFFL; final int verseStart = SwordUtil.decodeLittleEndian32(temp, 4); final int verseSize; if (datasize == 2) { @@ -354,7 +354,7 @@ public String readRawContent(ZVerseBackendState rafBook, Key key) throws IOExcep return ""; } - final int blockStart = SwordUtil.decodeLittleEndian32(temp, 0); + final long blockStart = SwordUtil.decodeLittleEndian32(temp, 0) & 0xFFFFFFFFL; final int blockSize = SwordUtil.decodeLittleEndian32(temp, 4); final int uncompressedSize = SwordUtil.decodeLittleEndian32(temp, 8);