From 8733445256f4b47d53f2ff855f717314cf2448f9 Mon Sep 17 00:00:00 2001 From: Jonathan Hedley Date: Sun, 19 Jun 2022 10:32:55 +1000 Subject: [PATCH] Fixed an OOB in TreeBuilder when getting the body Element Fixes: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=48116 Caused by: e714ef12fab4fd00cf7133a22fba4a71ccf7af8e --- .../org/jsoup/parser/HtmlTreeBuilderState.java | 5 +++-- src/test/resources/fuzztests/48116.html.gz | Bin 0 -> 9078 bytes 2 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 src/test/resources/fuzztests/48116.html.gz diff --git a/src/main/java/org/jsoup/parser/HtmlTreeBuilderState.java b/src/main/java/org/jsoup/parser/HtmlTreeBuilderState.java index e1f33a4303..354b2170aa 100644 --- a/src/main/java/org/jsoup/parser/HtmlTreeBuilderState.java +++ b/src/main/java/org/jsoup/parser/HtmlTreeBuilderState.java @@ -385,8 +385,9 @@ private boolean inBodyStartTag(Token t, HtmlTreeBuilder tb) { return false; // ignore } else { tb.framesetOk(false); - Element body = stack.get(1); - if (startTag.hasAttributes()) { + // will be on stack if this is a nested body. won't be if closed (which is a variance from spec, which leaves it on) + Element body; + if (startTag.hasAttributes() && (body = tb.getFromStack("body")) != null) { // we only ever put one body on stack for (Attribute attribute : startTag.attributes) { if (!body.hasAttr(attribute.getKey())) body.attributes().put(attribute); diff --git a/src/test/resources/fuzztests/48116.html.gz b/src/test/resources/fuzztests/48116.html.gz new file mode 100644 index 0000000000000000000000000000000000000000..37367dc8cc2067689c67531dac9a14b35255065b GIT binary patch literal 9078 zcmeGhJ8T?9bkCx}IwPf`0qKI!A&jiWmX#vB8{;G>4VEGVReUHrw`1SH{hc%&JD;sI1voEBYV!xkAVC3h&c>}1su?Z&43L$1E9+fkp2e{{}e`D9fIkyI1j0o zwuYMd@>~L-oyRtt{La^+h*1#HOl1m>!u<+x8zSL|9s*G!eGg2kcf(kk_ies>-yV|= z8@d^VGC)6=v5XOyhGBe{G$C>=$6LfxE2=8Hsq1qYYr@il`UT5$Fg z+?^6=1-Si2m+n~lr%)E zpl7*(TU%8_-E64GKo-WTd1+>lYQiO&5bby^g^B#=;)Y&%@?3Oig}AGTdWx$2vxLyY zpfn4mMRFV$*i%5lVyQwXU5+qePqy1_P*wn>C27m^Er*pMY7k*W+1nhl_gN7WoBR6_S#}h`osq0K?Y{F zCbvRrex^~nFCy>X{ozJ-`@W=hy1($u`AzW}yw`vz$yWpHUOqwMJ4CEP8-&MQd)E}n;do(V1{Rwr!*J>B60`te( z1(O%1TSbhos;JS`p(8>>shlG&*?td4Dr7{9VnDPwh1Kzhs&Thzu!S^mfW?No%>&=AL-1%~>9u z0GSq6ZM-d}w@gXto6Y(xuyj~gp9NO9uq@dxxUl*xus#bs&a=QLH4&-L0`