diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/jinterface/java_src/com/ericsson/otp/erlang/OtpInputStream.java | 12 | ||||
-rw-r--r-- | lib/jinterface/test/nc_SUITE.erl | 18 |
2 files changed, 25 insertions, 5 deletions
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpInputStream.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpInputStream.java index b9b43481ee..ae5f4ee072 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpInputStream.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpInputStream.java @@ -1112,12 +1112,16 @@ public class OtpInputStream extends ByteArrayInputStream { final int size = read4BE(); final byte[] buf = new byte[size]; final java.util.zip.InflaterInputStream is = - new java.util.zip.InflaterInputStream(this); + new java.util.zip.InflaterInputStream(this, new java.util.zip.Inflater(), size); + int curPos = 0; try { - final int dsize = is.read(buf, 0, size); - if (dsize != size) { + int curRead; + while(curPos < size && (curRead = is.read(buf, curPos, size - curPos)) != -1) { + curPos += curRead; + } + if (curPos != size) { throw new OtpErlangDecodeException("Decompression gave " - + dsize + " bytes, not " + size); + + curPos + " bytes, not " + size); } } catch (final IOException e) { throw new OtpErlangDecodeException("Cannot read from input stream"); diff --git a/lib/jinterface/test/nc_SUITE.erl b/lib/jinterface/test/nc_SUITE.erl index 9c88400c2a..d5388e54f4 100644 --- a/lib/jinterface/test/nc_SUITE.erl +++ b/lib/jinterface/test/nc_SUITE.erl @@ -89,7 +89,7 @@ end_per_suite(Config) -> init_per_testcase(Case, Config) -> T = case atom_to_list(Case) of "unicode"++_ -> 240; - _ -> 20 + _ -> 30 end, WatchDog = test_server:timetrap(test_server:seconds(T)), [{watchdog, WatchDog}| Config]. @@ -187,10 +187,18 @@ binary_roundtrip(Config) when is_list(Config) -> decompress_roundtrip(doc) -> []; decompress_roundtrip(suite) -> []; decompress_roundtrip(Config) when is_list(Config) -> + RandomBin = erlang:term_to_binary(lists:seq(1, 5 * 1024 * 1024)), % roughly 26MB + <<RandomBin1k:1024/binary,_/binary>> = RandomBin, + <<RandomBin1M:1048576/binary,_/binary>> = RandomBin, + <<RandomBin10M:10485760/binary,_/binary>> = RandomBin, Terms = [0.0, math:sqrt(2), <<1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,31:5>>, + RandomBin1k, + RandomBin1M, + RandomBin10M, + RandomBin, make_ref()], OutTrans = fun (D) -> @@ -205,10 +213,18 @@ decompress_roundtrip(Config) when is_list(Config) -> compress_roundtrip(doc) -> []; compress_roundtrip(suite) -> []; compress_roundtrip(Config) when is_list(Config) -> + RandomBin = erlang:term_to_binary(lists:seq(1, 5 * 1024 * 1024)), % roughly 26MB + <<RandomBin1k:1024/binary,_/binary>> = RandomBin, + <<RandomBin1M:1048576/binary,_/binary>> = RandomBin, + <<RandomBin10M:10485760/binary,_/binary>> = RandomBin, Terms = [0.0, math:sqrt(2), <<1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,31:5>>, + RandomBin1k, + RandomBin1M, + RandomBin10M, + RandomBin, make_ref()], OutTrans = fun (D) -> |