ref: 757bdf1aef3d93a27968857ac5b4435a52fa24a0
parent: f5fe6e2f17d2326c637d8ccd18af219709d15bcd
author: Werner Lemberg <[email protected]>
date: Mon Aug 13 22:02:26 EDT 2018
[cff] Fix segv. Reported as https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9864 * src/psaux/cffdecode.c (cff_decoder_parse_charstrings) <cff_op_random> [CFF_CONFIG_OPTION_OLD_ENGINE]: Use top dict's `random' field directly if parsing dictionaries.
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2018-08-14 Werner Lemberg <[email protected]>
+
+ [cff] Fix segv.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9864
+
+ * src/psaux/cffdecode.c (cff_decoder_parse_charstrings)
+ <cff_op_random> [CFF_CONFIG_OPTION_OLD_ENGINE]: Use top dict's
+ `random' field directly if parsing dictionaries.
+
2018-08-13 Alexei Podtelezhnikov <[email protected]>
[bdf] Use unsigned types.
--- a/src/psaux/cffdecode.c
+++ b/src/psaux/cffdecode.c
@@ -1712,16 +1712,20 @@
break;
case cff_op_random:
- FT_TRACE4(( " random\n" ));
+ {
+ FT_UInt32* randval = in_dict ? &decoder->cff->top_font.random
+ : &decoder->current_subfont->random;
- /* only use the lower 16 bits of `random' */
- /* to generate a number in the range (0;1] */
- args[0] = (FT_Fixed)
- ( ( decoder->current_subfont->random & 0xFFFF ) + 1 );
- args++;
- decoder->current_subfont->random =
- cff_random( decoder->current_subfont->random );
+ FT_TRACE4(( " random\n" ));
+
+ /* only use the lower 16 bits of `random' */
+ /* to generate a number in the range (0;1] */
+ args[0] = (FT_Fixed)( ( *randval & 0xFFFF ) + 1 );
+ args++;
+
+ *randval = cff_random( *randval );
+ }
break;
case cff_op_mul: