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