|  | @@ -62,6 +62,10 @@ import com.google.protobuf.util.JsonTestProto.TestStruct;
 | 
	
		
			
				|  |  |  import com.google.protobuf.util.JsonTestProto.TestTimestamp;
 | 
	
		
			
				|  |  |  import com.google.protobuf.util.JsonTestProto.TestWrappers;
 | 
	
		
			
				|  |  |  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.BigInteger;
 | 
	
		
			
				|  |  |  import java.util.HashMap;
 | 
	
	
		
			
				|  | @@ -1417,4 +1421,34 @@ public class JsonFormatTest extends TestCase {
 | 
	
		
			
				|  |  |        // 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.
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |  }
 |