|
@@ -62,6 +62,10 @@ import com.google.protobuf.util.JsonTestProto.TestStruct;
|
|
import com.google.protobuf.util.JsonTestProto.TestTimestamp;
|
|
import com.google.protobuf.util.JsonTestProto.TestTimestamp;
|
|
import com.google.protobuf.util.JsonTestProto.TestWrappers;
|
|
import com.google.protobuf.util.JsonTestProto.TestWrappers;
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
|
|
+import java.io.InputStream;
|
|
|
|
+import java.io.InputStreamReader;
|
|
|
|
+import java.io.Reader;
|
|
|
|
+import java.io.StringReader;
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
import java.math.BigInteger;
|
|
import java.math.BigInteger;
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
@@ -1417,4 +1421,34 @@ public class JsonFormatTest extends TestCase {
|
|
// Expected.
|
|
// Expected.
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ // Test that we are not leaking out JSON exceptions.
|
|
|
|
+ public void testJsonException() throws Exception {
|
|
|
|
+ InputStream throwingInputStream = new InputStream() {
|
|
|
|
+ public int read() throws IOException {
|
|
|
|
+ throw new IOException("12345");
|
|
|
|
+ }
|
|
|
|
+ };
|
|
|
|
+ InputStreamReader throwingReader = new InputStreamReader(throwingInputStream);
|
|
|
|
+ // When the underlying reader throws IOException, JsonFormat should forward
|
|
|
|
+ // through this IOException.
|
|
|
|
+ try {
|
|
|
|
+ TestAllTypes.Builder builder = TestAllTypes.newBuilder();
|
|
|
|
+ JsonFormat.parser().merge(throwingReader, builder);
|
|
|
|
+ fail("Exception is expected.");
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ assertEquals("12345", e.getMessage());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ Reader invalidJsonReader = new StringReader("{ xxx - yyy }");
|
|
|
|
+ // When the JSON parser throws parser exceptions, JsonFormat should turn
|
|
|
|
+ // that into InvalidProtocolBufferException.
|
|
|
|
+ try {
|
|
|
|
+ TestAllTypes.Builder builder = TestAllTypes.newBuilder();
|
|
|
|
+ JsonFormat.parser().merge(invalidJsonReader, builder);
|
|
|
|
+ fail("Exception is expected.");
|
|
|
|
+ } catch (InvalidProtocolBufferException e) {
|
|
|
|
+ // Expected.
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|