diff --git a/src/woff2_dec.cc b/src/woff2_dec.cc index 0e38ea8..36f1b05 100644 --- a/src/woff2_dec.cc +++ b/src/woff2_dec.cc @@ -817,11 +817,33 @@ bool ConvertWOFF2ToTTF(uint8_t* result, size_t result_length, } // We don't care about these fields of the header: // uint16_t major_version, minor_version - // uint32_t meta_offset, meta_length, meta_orig_length - // uint32_t priv_offset, priv_length - if (!file.Skip(24)) { + if (!file.Skip(2 * 2)) { return FONT_COMPRESSION_FAILURE(); } + uint32_t meta_offset; + uint32_t meta_length; + uint32_t meta_length_orig; + if (!file.ReadU32(&meta_offset) || + !file.ReadU32(&meta_length) || + !file.ReadU32(&meta_length_orig)) { + return FONT_COMPRESSION_FAILURE(); + } + if (meta_offset) { + if (meta_offset >= length || length - meta_offset < meta_length) { + return FONT_COMPRESSION_FAILURE(); + } + } + uint32_t priv_offset; + uint32_t priv_length; + if (!file.ReadU32(&priv_offset) || + !file.ReadU32(&priv_length)) { + return FONT_COMPRESSION_FAILURE(); + } + if (priv_offset) { + if (priv_offset >= length || length - priv_offset < priv_length) { + return FONT_COMPRESSION_FAILURE(); + } + } std::vector