From 9ae14ef6f024b9e5390614b0b2d455777eda3435 Mon Sep 17 00:00:00 2001 From: Dominik Stadler Date: Sat, 12 Aug 2023 17:37:14 +0000 Subject: [PATCH] Bug 66425: Avoid a ClassCastException found via oss-fuzz We try to avoid throwing ClassCastException, but it was possible to trigger one here with a specially crafted input-file Should fix https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=61400 git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1911618 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/hsmf/datatypes/RecipientChunks.java | 37 ++++++++++-------- ...nimized-POIHSMFFuzzer-5336473854148608.msg | Bin 0 -> 61529 bytes test-data/spreadsheet/stress.xls | Bin 46592 -> 46592 bytes 3 files changed, 21 insertions(+), 16 deletions(-) create mode 100644 test-data/hsmf/clusterfuzz-testcase-minimized-POIHSMFFuzzer-5336473854148608.msg diff --git a/poi-scratchpad/src/main/java/org/apache/poi/hsmf/datatypes/RecipientChunks.java b/poi-scratchpad/src/main/java/org/apache/poi/hsmf/datatypes/RecipientChunks.java index 8b37806fdc..d333a7b55d 100644 --- a/poi-scratchpad/src/main/java/org/apache/poi/hsmf/datatypes/RecipientChunks.java +++ b/poi-scratchpad/src/main/java/org/apache/poi/hsmf/datatypes/RecipientChunks.java @@ -187,7 +187,7 @@ public final class RecipientChunks implements ChunkGroupWithProperties { } /** Holds all the chunks that were found. */ - private List allChunks = new ArrayList<>(); + private final List allChunks = new ArrayList<>(); @Override public Map> getProperties() { @@ -212,21 +212,26 @@ public final class RecipientChunks implements ChunkGroupWithProperties { */ @Override public void record(Chunk chunk) { - if (chunk.getChunkId() == RECIPIENT_SEARCH.id) { - // TODO - parse - recipientSearchChunk = (ByteChunk) chunk; - } else if (chunk.getChunkId() == RECIPIENT_NAME.id) { - recipientDisplayNameChunk = (StringChunk) chunk; - } else if (chunk.getChunkId() == RECIPIENT_DISPLAY_NAME.id) { - recipientNameChunk = (StringChunk) chunk; - } else if (chunk.getChunkId() == RECIPIENT_EMAIL_ADDRESS.id) { - recipientEmailChunk = (StringChunk) chunk; - } else if (chunk.getChunkId() == RECIPIENT_SMTP_ADDRESS.id) { - recipientSMTPChunk = (StringChunk) chunk; - } else if (chunk.getChunkId() == DELIVERY_TYPE.id) { - deliveryTypeChunk = (StringChunk) chunk; - } else if (chunk instanceof PropertiesChunk) { - recipientProperties = (PropertiesChunk) chunk; + try { + if (chunk.getChunkId() == RECIPIENT_SEARCH.id) { + // TODO - parse + recipientSearchChunk = (ByteChunk) chunk; + } else if (chunk.getChunkId() == RECIPIENT_NAME.id) { + recipientDisplayNameChunk = (StringChunk) chunk; + } else if (chunk.getChunkId() == RECIPIENT_DISPLAY_NAME.id) { + recipientNameChunk = (StringChunk) chunk; + } else if (chunk.getChunkId() == RECIPIENT_EMAIL_ADDRESS.id) { + recipientEmailChunk = (StringChunk) chunk; + } else if (chunk.getChunkId() == RECIPIENT_SMTP_ADDRESS.id) { + recipientSMTPChunk = (StringChunk) chunk; + } else if (chunk.getChunkId() == DELIVERY_TYPE.id) { + deliveryTypeChunk = (StringChunk) chunk; + } else if (chunk instanceof PropertiesChunk) { + recipientProperties = (PropertiesChunk) chunk; + } + } catch (ClassCastException e) { + throw new IllegalArgumentException("ChunkId and type of chunk did not match, had id " + + chunk.getChunkId() + " and type of chunk: " + chunk.getClass(), e); } // And add to the main list diff --git a/test-data/hsmf/clusterfuzz-testcase-minimized-POIHSMFFuzzer-5336473854148608.msg b/test-data/hsmf/clusterfuzz-testcase-minimized-POIHSMFFuzzer-5336473854148608.msg new file mode 100644 index 0000000000000000000000000000000000000000..6c30756e4f2f70e7148939eee49b84f60f2fbbf3 GIT binary patch literal 61529 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 I@;`O|zng-vMF0Q* literal 0 HcmV?d00001 diff --git a/test-data/spreadsheet/stress.xls b/test-data/spreadsheet/stress.xls index 6b2669be7491908405c76d88f9f846ddd678669d..00b8ca4dea716228ff171301d13520496b18c5da 100644 GIT binary patch delta 2629 zcmZ9NTTE0(7{_N0y9>g?K}1*BjtVUx9#n420!P?I1zc|^-naCpw-(9fNGLy4Q&U$P zuBi{zR@K(mRo1T={NR{%HtP2l7P4>H&pyWdjIoCXV}DcsuMx)nT53(U_VD3>&c(FD z*hge=di}OARclORFEUeg8cSmX|EoRB!v;!I`(EZ{8&55npXXyfHWN(kr!&T9GLkjZ za%@jyGu9{V3pNyFXu0ezfpk{F?TskcnavW`>Cc{fhF`KwwH;s{+D=xS1=vwila)r* zC91gQBQuSvB=^v#ih0Y+irK4q%Lgk#BsDof*AP$_W=}}a83UCpgr>y&=mb4|YIK60 zJvBNZkDoiefLdtOG@F*WUl&`8&NuL)7b0~X+`hi7RPD8|#~Qrwm8N^~kamB7`Q-A8 z_5pXlrNQC zFdF1R85#}qH{{@`!G*j+>oWNRt;^+eT31MM#o$FUb|uV<<;S$XDZeH1mV88OiClQq z;H6g6)hUga$tPbLe5G7GX7F;^G8X2mg7>iW*L2{0k#%y8Tvb}3B3|*CD;(LDzI{}iEF~F23zIGS>?*1zY>&F1J_V) zt$al@LtqtPMqKbZ8H*b{EKkM_y&n5(v7d;S>kVL)V2|U%Yy_)HGOFz7t#X~CTAjm$ zTaEt6b)l~Vs{uPftO=|ZY~;Eyo54bkoRBN0PUS@4)}j9y&5VMD!GhyLZvm?ZYabWp zda#Bhqso4s23Jm_%Gm(75&dzRxe?3+yHBhYY#rDf<+On{IdYm@In64k9d0xFJ8lSl z6Idk4tf3oYnjQm;LM*!}%*|jej-VD-(0UcL1@3zE58o8}RB{L; zIlXW@(I2@j^!;GFz)leB1KSNYa$A`FV0#=ndt5ntRn7spd(r=lW*!9F2Ns+Z`XR6` zu=Yt|9tP`9GOFxfpl(-AkIFd$w+H=kn)xap#Cn{!Phx=gn1n7kR#`iE9bDvIRW?Z>zpZ}zXx_C$*iHNE`INB xeVX6?#~!6O>;L7R+%cOkyJr0vS7Uwg)enB>vdEKfotgcRYX>H*7x#Q={{i;X%$WcH delta 2544 zcmZ9LTTC2P7{||9c9#VPhFe+fau8H#VX@_Y>2O)@mjYcVv`Y&uP%nts=nJt4MjlP; z1NNj8sM0MYlopD@ycxrz`apcrc!_D$MB_sr8hvR9CVn&f$7N?Ox`RUAOYNTTb2b^H{k|t4DrIYne-A5WCm=X}-1OgnTEOZR`2E~i=Np?WV%g2Q8Rc;I+U4pr_Qa>Q92#4Z=}3jcc#6?`QQ+7iN1FWkkR#FJFrI~%rNfbAaU{WUV&2D( z$j>T3S1WOT66e2!^R+6lq6nj%al1vfF^bJGs!>~v{=hw%l6)+LwhE0IP~H+8Os# zWy`5Ha~e=vjs7q>8^KP2?GkGO)4-llPBU1IC8x%gQ)}k5ptctM!4;vlg4Kad6Keyj zk1&005!e8z7xo6>29~BiIJ9(_l?tKduU`3#{3a(`?IWF>|_6 z+k*b0`$FvjYXuu3b_T2s?8Ey)3xc&?hXI>D4Rp`Hah4OX=# zw0^KIOHP+9r`yaKKy5erXUTaEtOx8%V&}omfc-@|A+Vq&Cuqy*HFE}0+l&6d1EF33 z>jRr4b`k6>*!%;b4T1Gra{6sK17^-JY6sB&l$@8q&Vgk<6zXNL^I+`{g*E~fiZI$4 zA5h4aGic_FqIMAdVRDXvT>#r9b_MJr*fYv`6>P|oGi1vdHgjG>?J)X->q31U>=M{C zu{XdjgRQNeIiqIIo2VT<$k`C;1lZU?4zahuu0)u=wh`j;okz3gzsQ-m xy;&8bl#(()f2P;JD}!6