From 4515943fe83cfc0dea4d7a57668be1d887154991 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Thu, 20 Mar 2008 11:02:39 +0000 Subject: [PATCH] Fix for readCompressedUnicode not moaning about length=0, from bug #44643 git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@639242 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/hssf/record/RecordInputStream.java | 5 ++++- .../org/apache/poi/hssf/data/44643.xls | Bin 0 -> 15872 bytes .../org/apache/poi/hssf/usermodel/TestBugs.java | 14 ++++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 src/testcases/org/apache/poi/hssf/data/44643.xls diff --git a/src/java/org/apache/poi/hssf/record/RecordInputStream.java b/src/java/org/apache/poi/hssf/record/RecordInputStream.java index 431558ccc8..ba900b2a28 100755 --- a/src/java/org/apache/poi/hssf/record/RecordInputStream.java +++ b/src/java/org/apache/poi/hssf/record/RecordInputStream.java @@ -266,6 +266,9 @@ public class RecordInputStream extends InputStream } public String readCompressedUnicode(int length) { + if(length == 0) { + return ""; + } if ((length < 0) || ((remaining() < length) && !isContinueNext())) { throw new IllegalArgumentException("Illegal length " + length); } @@ -273,7 +276,7 @@ public class RecordInputStream extends InputStream StringBuffer buf = new StringBuffer(length); for (int i=0;i}rX)Pn2O=RMLE=L(Bqls)G-xD2*6+L9p|k6>v=|J?J(F|K zopbKbnQ!jgyXWrA>F)|gj(t{q0U5L&*|?U>#WauJVScfDo)6lSNu9cK5%W}8x`PnN z4e>@!3*yX@Q#s!bF`ErsKo&j?oL~z4NRHwe<-`9awQ}TXya5}HH!(-v3{ka?xojMz zb`};G9}7)7$E2T_a$lQt9SThgCm-!vwASPtv}Dzra<7;)V$xYm9eic#oHv>kD8?{r zB%eQ$asokT1NyKRF?8eBTHm@szX9YyUdge4dKEyKueBtw2tmvTB4v@%s?yS$_KMnQ zxqA|=C<)w4#Q6lfD%x9{;vH@2g(Aq&6yO%Bu1Rl)=W1#xLWpFR%4lu0=o(aFCD1Nc zD#Na4qo>hwqli}2jw&L{BlN4iyuO{iRHK3it9t8IhP{<4!)Z0@P=$xmJ4; zPnUIdW1X(XGT#5OPTl&~`*kauuDvyj@DBK_MV^ZHM`}mY$9f|rfnvOiA{v_e2II7h zip{a^{y433@g8Q=y1j?CRMOc=eH-5A)i|xZ-yesU6T>z>r(u**S<0gZ)#Mtq6QWwQ zq6u+ym@?%&o48JtbxHzd_y9|Q*0SZRY94IsAVsU9;eDiNIF&y@8o^wSL*Vyh*vM2e z6qa5i)aWm}rit}>!u`sRr&p_f<^Rumhxd4lTs)VhaQM@;xcZ85^i|{ND}D7jZ1%EN z`i%Ri-v)kq2f4oO$UEczh;pK#@atItxccF* zXSVHXtZO&=N~2$9(ie>;;c@9cBEyvkFVJ#=(?QCemrUt{Cf$ZJGd-Q(WL7BsfXjKa zlTJXeU7Fq->Y&WwnyK>^<3|JMkpUiYu7+WhV=d>I2RPY>v7fwxM?{nI6p43&J&dtm z^(Jh^!`O~3>}LZyxfbsx_www1&U35iMHr1N(LlM{r-24qo9Q1HfV+YmUgc?yi&wc` ze{oL=Tb-Yule&D3#XoX^i+L&AR6yxq;ot-nyitR<7~LS{FV!LG+T^Pxi-1MIBH)L> zc=Lm+ccow5Or7Q~FKKlhkKA@M=Q`Ud_KqseZZ%oTh*^mS5{>aun1TLCXImKynl?5l*3g+ zv6sU*uO+KROA2YE&Xo?Hpe2OoxF<+*%5u5GN6itGP%6J|Z%=PuLp=8MV0>e&KfWv0 z-Q66I?PH-?w0dcMRw2GLlVrU|y_m5pCw!5dOx7X!3zw}R*6?g}Ws}j;or%CT?&}22 z9!k3Zy4fR#-u&&#_C5I@y%xf?Uht zVn10y=RvZD@I_YA_*7ldc=>u6&jm}jJlW_dpBO&ZlKb+oqwzTUC@^QqB481)2v`Ix z0u}*_fJML}U=gqgSOhEr7J(ZfFj4%Ub@tTRqty%ZUw?z~f7O-aivNen{L|RP|BaM< zH3=5>wO6A!Yl57mOPKF_+R@0+C$L(z}sZM{Q$-HCzs4HZ81BpEMX_w zhtM|E^|wBdN3B}bu7bST(c9P6zb76a=r|IF@wFmpednq8U2l#k?pKUoK-Pc$it}aH zrxJ?wwI86jy%&&+$qUJ{|3#LxbbBDs#4jj%xlp)8#!)z= zlwbCk6q{2bJ=OhpH9OdQAG)y1_|fI6CoTEy=k@;O$7CyR&>$rR@i^ZY-Nz$lu6-*} z=rle_Ghn_j=}8s!P0QK8o*_LylkH!7U*_SV2x1d^+iiS^n>#Qyf7af__3IlVxBtHZ DxvW$1 literal 0 HcmV?d00001 diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java index b534a8bbfb..05ba29d09e 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java @@ -1204,6 +1204,20 @@ extends TestCase { assertEquals(2, wb.getNumberOfSheets()); } + + /** + * Used to give problems due to trying to read a zero + * length string, but that's now properly handled + */ + public void test44643() throws Exception { + FileInputStream in = new FileInputStream(new File(cwd, "44643.xls")); + + // Used to blow up with an IllegalArgumentException + HSSFWorkbook wb = new HSSFWorkbook(in); + in.close(); + + assertEquals(1, wb.getNumberOfSheets()); + } } -- 2.39.5