From 2941208f1eedabec2715b2a67d40f058df7eb5e6 Mon Sep 17 00:00:00 2001 From: Michiharu Ariza Date: Tue, 11 Dec 2018 12:21:24 -0800 Subject: [PATCH] [CFF] oss-fuzz issue 11690 ASSERT: substr.offset >= opStart (#1461) * fix oss-fuzz 11690: substr.offset >= opStart detect recursive subroutine call & handle as error * fix build failure * add minimized test case for oss-fuzz 11690 * removed asserts --- src/hb-cff-interp-common.hh | 9 ++++----- src/hb-subset-cff-common.hh | 12 ++++++++++-- src/hb-subset-cff1.cc | 4 ++-- src/hb-subset-cff2.cc | 4 ++-- ...-minimized-hb-subset-fuzzer-5750420593442816 | Bin 0 -> 96091 bytes 5 files changed, 18 insertions(+), 11 deletions(-) create mode 100644 test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5750420593442816 diff --git a/src/hb-cff-interp-common.hh b/src/hb-cff-interp-common.hh index effc08120..6b814014b 100644 --- a/src/hb-cff-interp-common.hh +++ b/src/hb-cff-interp-common.hh @@ -332,8 +332,10 @@ struct ByteStr inline bool sanitize (hb_sanitize_context_t *c) const { return str->sanitize (c, len); } inline const HBUINT8& operator [] (unsigned int i) const { - assert (str && (i < len)); - return (*str)[i]; + if (likely (str && (i < len))) + return (*str)[i]; + else + return Null(HBUINT8); } inline bool serialize (hb_serialize_context_t *c, const ByteStr &src) @@ -628,7 +630,6 @@ struct ParsedValues { VAL *val = values.push (); val->op = op; - assert (substr.offset >= opStart); val->str = ByteStr (substr.str, opStart, substr.offset - opStart); opStart = substr.offset; } @@ -637,7 +638,6 @@ struct ParsedValues { VAL *val = values.push (v); val->op = op; - assert (substr.offset >= opStart); val->str = ByteStr (substr.str, opStart, substr.offset - opStart); opStart = substr.offset; } @@ -707,7 +707,6 @@ struct InterpEnv inline void pop_n_args (unsigned int n) { - assert (n <= argStack.get_count ()); argStack.pop (n); } diff --git a/src/hb-subset-cff-common.hh b/src/hb-subset-cff-common.hh index cd29d4e33..7f3a12fc3 100644 --- a/src/hb-subset-cff-common.hh +++ b/src/hb-subset-cff-common.hh @@ -526,11 +526,19 @@ struct SubrSubsetParam } template - inline void set_current_str (ENV &env) + inline void set_current_str (ENV &env, bool calling) { ParsedCStr *parsed_str = get_parsed_str_for_context (env.context); if (likely (parsed_str != nullptr)) - current_parsed_str = parsed_str; + { + /* If the called subroutine is parsed partially but not completely yet, + * it must be because we are calling it recursively. + * Handle it as an error. */ + if (unlikely (calling && !parsed_str->is_parsed () && (parsed_str->values.len > 0))) + env.set_error (); + else + current_parsed_str = parsed_str; + } else env.set_error (); } diff --git a/src/hb-subset-cff1.cc b/src/hb-subset-cff1.cc index 7c8b14c5a..0a292264b 100644 --- a/src/hb-subset-cff1.cc +++ b/src/hb-subset-cff1.cc @@ -362,7 +362,7 @@ struct CFF1CSOpSet_SubrSubset : CFF1CSOpSetadd_op (op, env.substr); param.current_parsed_str->set_parsed (); env.returnFromSubr (); - param.set_current_str (env); + param.set_current_str (env, false); break; case OpCode_endchar: @@ -395,7 +395,7 @@ struct CFF1CSOpSet_SubrSubset : CFF1CSOpSetadd_call_op (op, substr, env.context.subr_num); hb_set_add (closure, env.context.subr_num); - param.set_current_str (env); + param.set_current_str (env, true); } private: diff --git a/src/hb-subset-cff2.cc b/src/hb-subset-cff2.cc index f7df4042c..84608c1a2 100644 --- a/src/hb-subset-cff2.cc +++ b/src/hb-subset-cff2.cc @@ -184,7 +184,7 @@ struct CFF2CSOpSet_SubrSubset : CFF2CSOpSetset_parsed (); env.returnFromSubr (); - param.set_current_str (env); + param.set_current_str (env, false); break; case OpCode_endchar: @@ -216,7 +216,7 @@ struct CFF2CSOpSet_SubrSubset : CFF2CSOpSetadd_call_op (op, substr, env.context.subr_num); hb_set_add (closure, env.context.subr_num); - param.set_current_str (env); + param.set_current_str (env, true); } private: diff --git a/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5750420593442816 b/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5750420593442816 new file mode 100644 index 0000000000000000000000000000000000000000..7f417181fca2266643a1bd322f04ec6b050e6642 GIT binary patch literal 96091 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 literal 0 HcmV?d00001