diff --git a/brotli b/brotli index 9c9bb00..510131d 160000 --- a/brotli +++ b/brotli @@ -1 +1 @@ -Subproject commit 9c9bb00f7f9ebd9265705c8a855fedcbb538a159 +Subproject commit 510131d1db47f91602f45b9a8d7b1ee54d12a629 diff --git a/src/font.cc b/src/font.cc index b2228e3..3679a4c 100644 --- a/src/font.cc +++ b/src/font.cc @@ -141,7 +141,7 @@ bool ReadTrueTypeCollection(Buffer* file, const uint8_t* data, size_t len, } std::vector offsets; - for (auto i = 0; i < num_fonts; i++) { + for (size_t i = 0; i < num_fonts; i++) { uint32_t offset; if (!file->ReadU32(&offset)) { return FONT_COMPRESSION_FAILURE(); @@ -297,7 +297,7 @@ bool WriteFontCollection(const FontCollection& font_collection, uint8_t* dst, // Offset Table, zeroed for now size_t offset_table = offset; // where to write offsets later - for (int i = 0; i < font_collection.fonts.size(); i++) { + for (size_t i = 0; i < font_collection.fonts.size(); i++) { StoreU32(0, &offset, dst); } @@ -308,7 +308,7 @@ bool WriteFontCollection(const FontCollection& font_collection, uint8_t* dst, } // Write fonts and their offsets. - for (int i = 0; i < font_collection.fonts.size(); i++) { + for (size_t i = 0; i < font_collection.fonts.size(); i++) { const auto& font = font_collection.fonts[i]; StoreU32(offset, &offset_table, dst); if (!WriteFont(font, &offset, dst, dst_size)) { diff --git a/src/glyph.cc b/src/glyph.cc index 17bef38..1dadafc 100644 --- a/src/glyph.cc +++ b/src/glyph.cc @@ -122,7 +122,7 @@ bool ReadGlyph(const uint8_t* data, size_t len, Glyph* glyph) { uint8_t flag_repeat = 0; for (int i = 0; i < num_contours; ++i) { flags[i].resize(glyph->contours[i].size()); - for (int j = 0; j < glyph->contours[i].size(); ++j) { + for (size_t j = 0; j < glyph->contours[i].size(); ++j) { if (flag_repeat == 0) { if (!buffer.ReadU8(&flag)) { return FONT_COMPRESSION_FAILURE(); @@ -143,7 +143,7 @@ bool ReadGlyph(const uint8_t* data, size_t len, Glyph* glyph) { // Read the x coordinates. int prev_x = 0; for (int i = 0; i < num_contours; ++i) { - for (int j = 0; j < glyph->contours[i].size(); ++j) { + for (size_t j = 0; j < glyph->contours[i].size(); ++j) { uint8_t flag = flags[i][j]; if (flag & kFLAG_XSHORT) { // single byte x-delta coord value @@ -170,7 +170,7 @@ bool ReadGlyph(const uint8_t* data, size_t len, Glyph* glyph) { // Read the y coordinates. int prev_y = 0; for (int i = 0; i < num_contours; ++i) { - for (int j = 0; j < glyph->contours[i].size(); ++j) { + for (size_t j = 0; j < glyph->contours[i].size(); ++j) { uint8_t flag = flags[i][j]; if (flag & kFLAG_YSHORT) { // single byte y-delta coord value diff --git a/src/port.h b/src/port.h index 4906fbc..bac47a9 100644 --- a/src/port.h +++ b/src/port.h @@ -17,6 +17,8 @@ #ifndef WOFF2_PORT_H_ #define WOFF2_PORT_H_ +#include + namespace woff2 { typedef unsigned int uint32; diff --git a/src/transform.cc b/src/transform.cc index b7b0cf0..2ad8b16 100644 --- a/src/transform.cc +++ b/src/transform.cc @@ -39,7 +39,7 @@ void WriteBytes(std::vector* out, const uint8_t* data, size_t len) { } void WriteBytes(std::vector* out, const std::vector& in) { - for (int i = 0; i < in.size(); ++i) { + for (size_t i = 0; i < in.size(); ++i) { out->push_back(in[i]); } } diff --git a/src/woff2_dec.cc b/src/woff2_dec.cc index 837eede..ef242cc 100644 --- a/src/woff2_dec.cc +++ b/src/woff2_dec.cc @@ -635,35 +635,6 @@ Table* FindTable(std::vector* tables, uint32_t tag) { return NULL; } -// This is linear search, but could be changed to binary because we -// do have a guarantee that the tables are sorted by tag. But the total -// cpu time is expected to be very small in any case. -const Table* FindTable(const std::vector& tables, uint32_t tag) { - size_t n_tables = tables.size(); - for (size_t i = 0; i < n_tables; ++i) { - if (tables[i].tag == tag) { - return &tables[i]; - } - } - return NULL; -} - -// https://www.microsoft.com/typography/otspec/maxp.htm -bool ReadNumGlyphs(const Table* maxp_table, - const uint8_t* dst, size_t dst_length, - uint16_t* num_glyphs) { - if (PREDICT_FALSE(static_cast(maxp_table->dst_offset + - maxp_table->dst_length) > dst_length)) { - return FONT_COMPRESSION_FAILURE(); - } - Buffer buffer(dst + maxp_table->dst_offset, maxp_table->dst_length); - // Skip 4 to reach 'maxp' numGlyphs - if (PREDICT_FALSE(!buffer.Skip(4) || !buffer.ReadU16(num_glyphs))) { - return FONT_COMPRESSION_FAILURE(); - } - return true; -} - // Get numberOfHMetrics, https://www.microsoft.com/typography/otspec/hhea.htm bool ReadNumHMetrics(const uint8_t* data, size_t data_size, uint16_t* num_hmetrics) { @@ -675,37 +646,6 @@ bool ReadNumHMetrics(const uint8_t* data, size_t data_size, return true; } -// x_min for glyph; https://www.microsoft.com/typography/otspec/glyf.htm -bool ReadGlyphXMin(Buffer* glyf_buff, Buffer* loca_buff, int16_t loca_format, - uint16_t index, int16_t* x_min) { - uint32_t offset1, offset2; - loca_buff->set_offset((loca_format == 0 ? 2 : 4) * index); - if (loca_format == 0) { - uint16_t tmp1, tmp2; - if (PREDICT_FALSE(!loca_buff->ReadU16(&tmp1) || - !loca_buff->ReadU16(&tmp2))) { - return FONT_COMPRESSION_FAILURE(); - } - // https://www.microsoft.com/typography/otspec/loca.htm - // "The actual local offset divided by 2 is stored." - offset1 = tmp1 * 2; - offset2 = tmp2 * 2; - } else if (PREDICT_FALSE(!loca_buff->ReadU32(&offset1) || - !loca_buff->ReadU32(&offset2))) { - return FONT_COMPRESSION_FAILURE(); - } - - if (offset1 != offset2) { - glyf_buff->set_offset(offset1 + 2); - if (!glyf_buff->ReadS16(x_min)) { - return FONT_COMPRESSION_FAILURE(); - } - } else { - *x_min = 0; - } - return true; -} - // http://dev.w3.org/webfonts/WOFF2/spec/Overview.html#hmtx_table_format bool ReconstructTransformedHmtx(const uint8_t* transformed_buf, size_t transformed_size, @@ -785,18 +725,6 @@ bool ReconstructTransformedHmtx(const uint8_t* transformed_buf, return true; } -uint32_t ComputeChecksum(const Table* table, const uint8_t* dst) { - return ComputeULongSum(dst + table->dst_offset, table->dst_length); -} - -const Table* FindTable(TtcFont ttc_font, const std::vector
& tables, - uint32_t tag) { - for (const auto i : ttc_font.table_indices) { - if (tables[i].tag == tag) return &tables[i]; - } - return NULL; -} - bool Woff2Uncompress(uint8_t* dst_buf, size_t dst_size, const uint8_t* src_buf, size_t src_size) { size_t uncompressed_size = dst_size; diff --git a/src/woff2_enc.cc b/src/woff2_enc.cc index 920c614..48878b5 100644 --- a/src/woff2_enc.cc +++ b/src/woff2_enc.cc @@ -23,7 +23,7 @@ #include #include -#include "./encode.h" +#include "./compressor.h" #include "./buffer.h" #include "./font.h" #include "./normalize.h" @@ -148,14 +148,6 @@ size_t ComputeWoff2Length(const FontCollection& font_collection, return size; } -size_t ComputeTTFLength(const std::vector
& tables) { - size_t size = 12 + 16 * tables.size(); // sfnt header - for (const auto& table : tables) { - size += Round4(table.src_length); - } - return size; -} - size_t ComputeUncompressedLength(const Font& font) { // sfnt header + offset table size_t size = 12 + 16 * font.num_tables;