From 8b205d660d37503f71d4b1bbbc9779925ed14e8d Mon Sep 17 00:00:00 2001 From: Atsuhiko Yamanaka Date: Wed, 11 Sep 2013 15:16:44 -0700 Subject: [PATCH 1/2] ArrayIndexOutOfBoundsException in Tree.d_code * https://github.com/ymnk/jzlib/issues/9 * fixed a bug in calculating the size of the pending buffer. * added a test case based on https://github.com/jglick/jzlib-9-demo --- src/main/java/com/jcraft/jzlib/Deflate.java | 2 +- src/test/resources/jzlib.fail.gz | Bin 0 -> 81822 bytes src/test/scala/GZIPIOStreamTest.scala | 36 +++++++++++++++++++- src/test/scala/package.scala | 18 ++++++++-- 4 files changed, 51 insertions(+), 5 deletions(-) create mode 100644 src/test/resources/jzlib.fail.gz diff --git a/src/main/java/com/jcraft/jzlib/Deflate.java b/src/main/java/com/jcraft/jzlib/Deflate.java index 47ad442..99297a7 100644 --- a/src/main/java/com/jcraft/jzlib/Deflate.java +++ b/src/main/java/com/jcraft/jzlib/Deflate.java @@ -1384,7 +1384,7 @@ else if(windowBits > 15){ pending_buf = new byte[lit_bufsize*4]; pending_buf_size = lit_bufsize*4; - d_buf = lit_bufsize/2; + d_buf = lit_bufsize; l_buf = (1+2)*lit_bufsize; this.level = level; diff --git a/src/test/resources/jzlib.fail.gz b/src/test/resources/jzlib.fail.gz new file mode 100644 index 0000000000000000000000000000000000000000..05863bf558fdca8b3682d1296284b41b3992f3c6 GIT binary patch literal 81822 zcma(3cRbbq{|1iJpc0Z0LJ^gbMD}Q*j6{xctn5uPvrDBMqpYkb+p)(X$0~aZ9eacj zLI|1Xdw;6e>-~OzZol8{`~CZMf8CFc`{R0CkL$Yb*f56)d#N}?{TCWUo&|r6Sj$dVTx1(xj*?>5h;Ip&QYe3wb zWb@f1N_uUq82IeW*i+~76RWDEb|z=+4Jy5Nr|pTW2|imJGYLMA+&8BUh|6;_#Fi@J z=9bUm?Ml$*tPn zoUYnkURh*Yny1)Wolb)fty)=KCT`3V`{92i&cQbWC0jGZE#jsMaYJUe8~&k$$uiH? zb(xCI-M9L?@XI&Y8T8pm*j@42RFTFMpZl;qAW8&rB3zacKqD@tq| z_;`O`Wh2h}w-D#2`F9EHK6jReiF(AA#nUcLlx&3|3BZtbzLiz9@aNjnA77Db>&B-Y-|; zme@beZCBR$_qB*H=(dgsjg$ym9Z28#!0OE)q`$MtPu%1V&9hJNsbR=bmHir`LfE}d zbi3O^80@C#E!WDoaBsQU-NJD3dSYeOr>|LPBR};0 zPQ;V8I?)k|vCLeto7bVuVm2pO`*Mp;@ys`0wXH)pVND;dWn zE(>cPHMxCUl1>NB=^?F`Rv$P+W4t8mOq~@`ntrlSJ-P=1le=Fg_?>=V8*de#PX6AoTZEp$W96klGkjL=HM~-wy66w@HQQXWIKA7G4{&79tG5HY3QjJ zeO_ev=Q5}*+A9pNI;fadjHJeYc^gnJN`F51GW=)VXi=B5W7ddkp8G2)p@KwNS2a|s z@~y930sSjW*iwsDvLDBmYUZl8CaPH3iEO)D9X?*0_4U-#SVzC6NhXhtL-&4Q$t&_( zOt+oKbLkX%o8FM|k94w@@n+`G$^CFRYqYY4+@Kwpiub%6rzKmqmW~t;8pIh!NM20w_}V)pCu&zT=}T}dqykh^$8!| zhN#N~UtS z_@T)D6?_dSfr5Qx|-3D^I?n}ck3-r)rwKwzL&FTtwJUpw$#kzpu^!q!LR7J@!c7? zR&UcR{pQ}N`-Dvs_!T_T&mVWrI(ChHEtSw1K_|#9kaS{9`z!vA&)6AMLQxCZ@ySPZ zEmo0r}+)ca=B5RBGa{o8#X2nyp4-5nWcQw zw@Hps?zPn+OCTHF%`B#>p|*++wLLXe8z6g}pqFQLrdV1TAMn{TadwKGF(XkTA*O6r zb4npoz2jV_sYlprzGhlXB){Sn3u$91o3gdC5Q)jgkavUf#gZ6sF={~cY)OZR>wa5Ydy@S$AqjJHj-SG-gC z6}>n4Wj(!K8)aTB*1zv@dMv*u$0;=l7daZ$vAefB03ooBKedc!DIr=lo(~~Y*Hwka- zZLsudSm}$`KSmVg9K&SwprZn9RA(6G9eDRuTJcL*Ysa7VdXW_% z$7iL8-k)t!3hijLx}c)%RVdP9bp(dbgXBlPaa8u;guFvxvAM4atxX5}NHl>};`!lJ zDen`x*Br_2YS^vujt>_?;Yqsw3Hc?zd?+k2gu<^MStaVvmr8kuKi2agyEX9&3dujW z=KBS1_D#q$rstXae#x=xV6VK^$0{Mm10BPki$LN0O(pdIM zMh+UE(=YlbcGHmRPb|J#c`x33ajFil8e@M-&Nu8%WOPWlu3Ad~9RZa$W^w|cY;Q?RmZ$CC(;h2t(U){>%_h0`-Z?AHA@i9p{}Yv)6u>8=mEH8il_+tYet zHd0E(gWbno6PWW`>ghKW=@|{WL^)ZFIc~g*Eqo>xHWYm5J3hE+TmZ#(yIt=1JdB0% z>ACgZK_Sz;+b@*uAwb0Y$ zv!>%7^aWT}Q8*FrL#6EDL_9lAaLyBdBkLQMb6JQj15bBPE^9>4kZ_Xu42dF-R)>7% z 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 literal 0 HcmV?d00001 diff --git a/src/test/scala/GZIPIOStreamTest.scala b/src/test/scala/GZIPIOStreamTest.scala index 3cd97b8..aa044de 100644 --- a/src/test/scala/GZIPIOStreamTest.scala +++ b/src/test/scala/GZIPIOStreamTest.scala @@ -5,6 +5,10 @@ import org.scalatest._ import org.scalatest.matchers.ShouldMatchers import java.io._ +import java.util.zip.CheckedOutputStream +import java.util.zip.CheckedInputStream +import java.util.zip.{GZIPInputStream => juzGZIPInputStream} +import java.util.zip.{CRC32 => juzCRC32} import JZlib._ @@ -16,7 +20,7 @@ class GZIPIOStreamTest extends FlatSpec with BeforeAndAfter with ShouldMatchers after { } - behavior of "GZipOutputStream and GZipInputStream" + behavior of "GZIPOutputStream and GZIPInputStream" it can "deflate and infate data." in { @@ -53,4 +57,34 @@ class GZIPIOStreamTest extends FlatSpec with BeforeAndAfter with ShouldMatchers crc32.getValue should equal(gis.getCRC.asInstanceOf[Long]) } + + behavior of "GZIPOutputStream" + + // https://github.com/ymnk/jzlib/issues/9 + // https://github.com/jglick/jzlib-9-demo + it can "deflate some file without AIOOBE." in { + val pos = new PipedOutputStream() + val pis = new PipedInputStream(pos) + val csOut = new juzCRC32() + val gos = new GZIPOutputStream(pos) + val cos = new CheckedOutputStream(gos, csOut) + + val t = new Thread() { + override def run = { + val fail = "/jzlib.fail.gz".fromResource + val fis = new juzGZIPInputStream(new ByteArrayInputStream(fail)) + fis -> cos + cos.close() + } + } + t.start(); + + val gis = new GZIPInputStream(pis) + val csIn = new juzCRC32(); + new CheckedInputStream(gis, csIn) -> new ByteArrayOutputStream() + + t.join() + + csIn.getValue() should equal(csOut.getValue) + } } diff --git a/src/test/scala/package.scala b/src/test/scala/package.scala index 35d1e5e..30f0624 100644 --- a/src/test/scala/package.scala +++ b/src/test/scala/package.scala @@ -5,13 +5,25 @@ import java.io._ package object jzlib { implicit def readIS(is: InputStream) = new { - def ->(out: OutputStream)(implicit buf: Array[Byte]) = { - Stream.continually(is.read(buf)). - takeWhile(-1 !=).foreach(i => out.write(buf, 0, i)) + def ->(out: OutputStream) + (implicit buf: Array[Byte] = new Array[Byte](1024)) = { + Stream. + continually(is.read(buf)). + takeWhile(-1 !=). + foreach(i => out.write(buf, 0, i)) is.close } } + // reading a resource file + implicit def fromResource(str: String ) = new { + def fromResource: Array[Byte] = + io.Source. + fromURL(getClass.getResource(str))(io.Codec.ISO8859). + map(_.toByte). + toArray + } + implicit def readArray(is: Array[Byte]) = new { def ->(out: OutputStream)(implicit buf: Array[Byte]) = { new ByteArrayInputStream(is) -> (out) From e2fee8ff1f53020b8922266f068da994af21cbe6 Mon Sep 17 00:00:00 2001 From: Atsuhiko Yamanaka Date: Tue, 1 Oct 2013 17:51:53 -0700 Subject: [PATCH 2/2] refactoring for improving the performance. --- src/main/java/com/jcraft/jzlib/Deflate.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/jcraft/jzlib/Deflate.java b/src/main/java/com/jcraft/jzlib/Deflate.java index 99297a7..cfda0f0 100644 --- a/src/main/java/com/jcraft/jzlib/Deflate.java +++ b/src/main/java/com/jcraft/jzlib/Deflate.java @@ -277,7 +277,7 @@ static class Config{ // Depth of each subtree used as tie breaker for trees of equal frequency byte[] depth=new byte[2*L_CODES+1]; - int l_buf; // index for literals or lengths */ + byte[] l_buf; // index for literals or lengths */ // Size of match buffer for literals/lengths. There are 4 reasons for // limiting lit_bufsize to 64K: @@ -632,7 +632,7 @@ boolean _tr_tally (int dist, // distance of matched string pending_buf[d_buf+last_lit*2] = (byte)(dist>>>8); pending_buf[d_buf+last_lit*2+1] = (byte)dist; - pending_buf[l_buf+last_lit] = (byte)lc; last_lit++; + l_buf[last_lit] = (byte)lc; last_lit++; if (dist == 0) { // lc is the unmatched char @@ -677,7 +677,7 @@ void compress_block(short[] ltree, short[] dtree){ do{ dist=((pending_buf[d_buf+lx*2]<<8)&0xff00)| (pending_buf[d_buf+lx*2+1]&0xff); - lc=(pending_buf[l_buf+lx])&0xff; lx++; + lc=(l_buf[lx])&0xff; lx++; if(dist == 0){ send_code(lc, ltree); // send a literal byte @@ -1381,11 +1381,11 @@ else if(windowBits > 15){ // We overlay pending_buf and d_buf+l_buf. This works since the average // output size for (length,distance) codes is <= 24 bits. - pending_buf = new byte[lit_bufsize*4]; - pending_buf_size = lit_bufsize*4; + pending_buf = new byte[lit_bufsize*3]; + pending_buf_size = lit_bufsize*3; d_buf = lit_bufsize; - l_buf = (1+2)*lit_bufsize; + l_buf = new byte[lit_bufsize]; this.level = level; @@ -1422,6 +1422,7 @@ int deflateEnd(){ } // Deallocate in reverse order of allocations: pending_buf=null; + l_buf=null; head=null; prev=null; window=null; @@ -1699,6 +1700,8 @@ public Object clone() throws CloneNotSupportedException { Deflate dest = (Deflate)super.clone(); dest.pending_buf = dup(dest.pending_buf); + dest.d_buf = dest.d_buf; + dest.l_buf = dup(dest.l_buf); dest.window = dup(dest.window); dest.prev = dup(dest.prev);