From db700b5670d9475cc8ed4880cc9447b232c5e432 Mon Sep 17 00:00:00 2001 From: Garret Rieger Date: Mon, 12 Jun 2023 23:38:26 +0000 Subject: [PATCH] [subset] fix fuzzer timeout. Fixes: https://oss-fuzz.com/testcase-detail/6681253479579648. Limits iteration of coverage table during MATH subset to valid glyphs. --- src/hb-iter.hh | 2 +- src/hb-ot-math-table.hh | 9 +++++---- ...e-minimized-hb-subset-fuzzer-6681253479579648 | Bin 0 -> 3472 bytes 3 files changed, 6 insertions(+), 5 deletions(-) create mode 100644 test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-6681253479579648 diff --git a/src/hb-iter.hh b/src/hb-iter.hh index 5269cc188..61e05180b 100644 --- a/src/hb-iter.hh +++ b/src/hb-iter.hh @@ -842,7 +842,7 @@ struct template auto operator () (Iterable&& it, unsigned count) const HB_AUTO_RETURN - ( hb_zip (hb_range (count), it) | hb_map (hb_second) ) + ( hb_zip (hb_range (count), it) | hb_map_retains_sorting (hb_second) ) /* Specialization arrays. */ diff --git a/src/hb-ot-math-table.hh b/src/hb-ot-math-table.hh index 62ed13b26..b11da464b 100644 --- a/src/hb-ot-math-table.hh +++ b/src/hb-ot-math-table.hh @@ -570,6 +570,7 @@ struct MathGlyphInfo auto it = + hb_iter (this+extendedShapeCoverage) + | hb_take (c->plan->source->get_num_glyphs ()) | hb_filter (glyphset) | hb_map_retains_sorting (glyph_map) ; @@ -941,13 +942,13 @@ struct MathVariants if (unlikely (!c->serializer->extend_min (out))) return_trace (false); if (!c->serializer->check_assign (out->minConnectorOverlap, minConnectorOverlap, HB_SERIALIZE_ERROR_INT_OVERFLOW)) return_trace (false); - + hb_sorted_vector_t new_vert_coverage; hb_sorted_vector_t new_hori_coverage; hb_set_t indices; collect_coverage_and_indices (new_vert_coverage, vertGlyphCoverage, 0, vertGlyphCount, indices, glyphset, glyph_map); collect_coverage_and_indices (new_hori_coverage, horizGlyphCoverage, vertGlyphCount, vertGlyphCount + horizGlyphCount, indices, glyphset, glyph_map); - + if (!c->serializer->check_assign (out->vertGlyphCount, new_vert_coverage.length, HB_SERIALIZE_ERROR_INT_OVERFLOW)) return_trace (false); if (!c->serializer->check_assign (out->horizGlyphCount, new_hori_coverage.length, HB_SERIALIZE_ERROR_INT_OVERFLOW)) @@ -959,10 +960,10 @@ struct MathVariants if (!o) return_trace (false); o->serialize_subset (c, glyphConstruction[i], this); } - + if (new_vert_coverage) out->vertGlyphCoverage.serialize_serialize (c->serializer, new_vert_coverage.iter ()); - + if (new_hori_coverage) out->horizGlyphCoverage.serialize_serialize (c->serializer, new_hori_coverage.iter ()); return_trace (true); diff --git a/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-6681253479579648 b/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-6681253479579648 new file mode 100644 index 0000000000000000000000000000000000000000..b6239d6f725ce0a8ef3d3ec40e1c3d05c864959b GIT binary patch literal 3472 zcmd6pe@vZM8OOipJ(tVnLMiQ7Lso2QH#bb$4t0N2oeMBJx`~29>Dt(}cQA_zEoH2B zI@3EWtUnmAn$2ZaAd#4@&SZZ~?XvlMn*LGS#>|8`(vZ4DYWv4bYRkrt2{Q;t~pWLl#r5}|M;!5yvGuakAG#^Pn-Vy ztn5dnNJ4E_>(lFt&Ut1Py{LwUN37P4dJi^L#@^k#b6xAcRmWW*Wkjs>)^~f3^}aU} zD~&#tahKj!UQ=RUv$9RT_eVNjoZS`-MDjCByt?NQk_9D-G5rb#dqcLYoD@4eX@Mfp z(v;?`qLRCUgwbVpRl~YRcPJxiwbW}!;_i=w9~G)F-7EJkUC$XWjoh`(7<~aMKJ0Ay zZSm>)TNBz7&J(a;Uxzc3qsA2lE#(P4paJ)T_i;V9R=X;nJ^D{|Y);~3r;dL5`HMf) zH_@}ZG0_m>Sv>dFEaTuG-3~7w60)3o$0;mf8j6lg8WgNDk zdC?9ym+4a~)dp?V!>VJ~yLCcCI`3IbhKZX@lNDcNVrH?)F-y?3MC<7WnbNP`xLvq0 z8S2-jW{B;E_csvPt@Nn2(<7nzsOssKi0)C4R5Xbf-Sj9H#X-Mk5ly%W_g6PLwo*ae?k2MI_J#Iw@_(_9>u_#~}VTFN0&?WpGLMKoLOh!1Lf$a1y*D+fD+t z=YwK^OglE(k!$}o7?SN^zJvLW^`HVkdunMxY5{jMM)yJV9?AlRpbYE)Pk>Hv47>sG z>k#%1jmsX+1Nd{e3N(O&pdVoK@E{nKJ(2^^cLcjfpm*K|>cL4cB>Ob%G_O zubq5}bfylt?5c8Is;nOTd8)`tiytbl-c-8!=HJITZ^ijLU4OQ~u3%!Uw#lhE!A|iD zi|kHcWPjH}xa{D^R*m2Jy%&1FpI-mTb270PS>c-$*+k}F%x3EG;}J#PMyoql%fU#I z<+Ojfad%z97g_9`nJ%(7oi^W)ZXGvj8#rDZtfR<|>dHSZTy@h$c28Jj(O;my^UOl2 z(=K_n{*z9Vt{59-6!*&r5r_94nM6zCVJc7f*(2ixe9d~a?y;8arbNrvl}D|mEN6t3 zELfs(c)$IQQQVMINPY%*ovF5+7{Pf>i(WIH8K$ocUR8kD@H4$fUkDh@Oid3;rU%}o zfO-G$Y^nblg3JVqop3?GF$<@=7|i$+GKabmig@7~FFvc!T*K=%hFa&FxQ^mAm+A*3@Dcrb#^P@0+i}-P zvSzW@KAd_D&BxJl2acL878krFt~+%Jxcu!U7TUxs-`vD6UfNJ$(iBO{^>y4N{e4Zi zxk77X8WXL%5b(^ulA8>tOkG`5GsG2K%vNJ3Zh~B8FJr06TRa15xFfVWzAw0LQ9nFT zWR5HH02FV9e2(iAQDtSi4A^{|wd0Tt>UlI?w0wl4xGoPCh{ia`ya;PpKLdH_YQj{@39(d!#7 twtbgn`}sWjQP@ur?Jollf<|zLYIx=@pX*#tqaX(2Ak$|I|I#8>^)FD4PqP33 literal 0 HcmV?d00001