From 4d8a84a48d29a5224cdbfee33301f210a78e1233 Mon Sep 17 00:00:00 2001 From: akwizgran <akwizgran@users.sourceforge.net> Date: Tue, 1 Nov 2016 12:16:03 +0000 Subject: [PATCH] Don't throw IllegalStateException if BDF input is incomplete. --- .../src/org/briarproject/api/data/BdfReader.java | 2 ++ .../org/briarproject/api/data/BdfReaderFactory.java | 2 ++ .../org/briarproject/data/BdfReaderFactoryImpl.java | 10 +++++++++- .../src/org/briarproject/data/BdfReaderImpl.java | 13 +++---------- .../org/briarproject/data/BdfReaderImplTest.java | 2 +- 5 files changed, 17 insertions(+), 12 deletions(-) diff --git a/briar-api/src/org/briarproject/api/data/BdfReader.java b/briar-api/src/org/briarproject/api/data/BdfReader.java index ad0efccf23..531806beb8 100644 --- a/briar-api/src/org/briarproject/api/data/BdfReader.java +++ b/briar-api/src/org/briarproject/api/data/BdfReader.java @@ -4,6 +4,8 @@ import java.io.IOException; public interface BdfReader { + int DEFAULT_NESTED_LIMIT = 5; + boolean eof() throws IOException; void close() throws IOException; diff --git a/briar-api/src/org/briarproject/api/data/BdfReaderFactory.java b/briar-api/src/org/briarproject/api/data/BdfReaderFactory.java index e717f7476a..f8a53c1fbf 100644 --- a/briar-api/src/org/briarproject/api/data/BdfReaderFactory.java +++ b/briar-api/src/org/briarproject/api/data/BdfReaderFactory.java @@ -5,4 +5,6 @@ import java.io.InputStream; public interface BdfReaderFactory { BdfReader createReader(InputStream in); + + BdfReader createReader(InputStream in, int nestedLimit); } diff --git a/briar-core/src/org/briarproject/data/BdfReaderFactoryImpl.java b/briar-core/src/org/briarproject/data/BdfReaderFactoryImpl.java index fb2ca9e671..0f1196c661 100644 --- a/briar-core/src/org/briarproject/data/BdfReaderFactoryImpl.java +++ b/briar-core/src/org/briarproject/data/BdfReaderFactoryImpl.java @@ -5,9 +5,17 @@ import org.briarproject.api.data.BdfReaderFactory; import java.io.InputStream; +import static org.briarproject.api.data.BdfReader.DEFAULT_NESTED_LIMIT; + class BdfReaderFactoryImpl implements BdfReaderFactory { + @Override public BdfReader createReader(InputStream in) { - return new BdfReaderImpl(in); + return new BdfReaderImpl(in, DEFAULT_NESTED_LIMIT); + } + + @Override + public BdfReader createReader(InputStream in, int nestedLimit) { + return new BdfReaderImpl(in, nestedLimit); } } diff --git a/briar-core/src/org/briarproject/data/BdfReaderImpl.java b/briar-core/src/org/briarproject/data/BdfReaderImpl.java index 59a53cfe63..d1fe25794f 100644 --- a/briar-core/src/org/briarproject/data/BdfReaderImpl.java +++ b/briar-core/src/org/briarproject/data/BdfReaderImpl.java @@ -32,21 +32,14 @@ import static org.briarproject.data.Types.TRUE; @NotThreadSafe class BdfReaderImpl implements BdfReader { - final static int DEFAULT_NESTED_LIMIT = 5; - - private static final byte[] EMPTY_BUFFER = new byte[] {}; + private static final byte[] EMPTY_BUFFER = new byte[0]; private final InputStream in; + private final int nestedLimit; private boolean hasLookahead = false, eof = false; private byte next; private byte[] buf = new byte[8]; - private final int nestedLimit; - - BdfReaderImpl(InputStream in) { - this.in = in; - this.nestedLimit = DEFAULT_NESTED_LIMIT; - } BdfReaderImpl(InputStream in, int nestedLimit) { this.in = in; @@ -54,7 +47,7 @@ class BdfReaderImpl implements BdfReader { } private void readLookahead() throws IOException { - if (eof) throw new IllegalStateException(); + if (eof) return; if (hasLookahead) throw new IllegalStateException(); // Read a lookahead byte int i = in.read(); diff --git a/briar-tests/src/org/briarproject/data/BdfReaderImplTest.java b/briar-tests/src/org/briarproject/data/BdfReaderImplTest.java index ae4de10db1..5d74a63d56 100644 --- a/briar-tests/src/org/briarproject/data/BdfReaderImplTest.java +++ b/briar-tests/src/org/briarproject/data/BdfReaderImplTest.java @@ -268,7 +268,7 @@ public class BdfReaderImplTest extends BriarTestCase { String unicode = "\uFDD0\uFDD1\uFDD2\uFDD3"; String hex = StringUtils.toHexString(unicode.getBytes("UTF-8")); // STRING_8 tag, "foo", the empty string, and the test string - setContents("41" + "03" + "666F6F" +"41" + "00" + "41" + "0C" + hex); + setContents("41" + "03" + "666F6F" + "41" + "00" + "41" + "0C" + hex); assertEquals("foo", r.readString(Integer.MAX_VALUE)); assertEquals("", r.readString(Integer.MAX_VALUE)); assertEquals(unicode, r.readString(Integer.MAX_VALUE)); -- GitLab