From b4e130ff92f700a806943029afb16070988a1378 Mon Sep 17 00:00:00 2001 From: Hiroshi Miura Date: Sat, 16 Apr 2022 14:51:28 +0900 Subject: [PATCH] Check seek/skip minus position value Signed-off-by: Hiroshi Miura --- .../main/java/org/dict/zip/RandomAccessInputStream.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/dictzip-lib/src/main/java/org/dict/zip/RandomAccessInputStream.java b/dictzip-lib/src/main/java/org/dict/zip/RandomAccessInputStream.java index 70ec982..201ff35 100644 --- a/dictzip-lib/src/main/java/org/dict/zip/RandomAccessInputStream.java +++ b/dictzip-lib/src/main/java/org/dict/zip/RandomAccessInputStream.java @@ -20,6 +20,8 @@ */ package org.dict.zip; +import org.jetbrains.annotations.NotNull; + import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; @@ -173,7 +175,7 @@ public class RandomAccessInputStream extends InputStream { * {@inheritDoc} */ @Override - public final int read(final byte[] buf, final int off, final int len) throws IOException { + public final int read(final byte @NotNull [] buf, final int off, final int len) throws IOException { int idx = 0; while (idx < len) { int c = read(currentpos); @@ -220,7 +222,11 @@ public class RandomAccessInputStream extends InputStream { * @exception IOException if an I/O error has occurred. */ public final void seek(final long pos) throws IOException { - currentpos = pos; + if (pos < 0) { + currentpos = 0; + } else { + currentpos = Math.min(pos, length()); + } } /** @@ -228,7 +234,9 @@ public class RandomAccessInputStream extends InputStream { */ @Override public final long skip(final long size) throws IOException { - if (currentpos + size > length()) { + if (size < 0 && currentpos + size < 0) { + currentpos = 0; + } else if (currentpos + size > length()) { currentpos = length(); } else { currentpos += size; -- 2.11.0