OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // This is the implementation of decompression of the proposed WOFF Ultra | 5 // This is the implementation of decompression of the proposed WOFF Ultra |
6 // Condensed file format. | 6 // Condensed file format. |
7 | 7 |
8 #include <cassert> | 8 #include <cassert> |
9 #include <cstdlib> | 9 #include <cstdlib> |
10 #include <vector> | 10 #include <vector> |
(...skipping 616 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
627 &points, &triplet_bytes_consumed)) { | 627 &points, &triplet_bytes_consumed)) { |
628 return OTS_FAILURE(); | 628 return OTS_FAILURE(); |
629 } | 629 } |
630 const uint32_t header_and_endpts_contours_size = | 630 const uint32_t header_and_endpts_contours_size = |
631 kEndPtsOfContoursOffset + 2 * n_contours; | 631 kEndPtsOfContoursOffset + 2 * n_contours; |
632 if (glyf_dst_size < header_and_endpts_contours_size) { | 632 if (glyf_dst_size < header_and_endpts_contours_size) { |
633 return OTS_FAILURE(); | 633 return OTS_FAILURE(); |
634 } | 634 } |
635 StoreU16(glyf_dst, 0, n_contours); | 635 StoreU16(glyf_dst, 0, n_contours); |
636 ComputeBbox(points, glyf_dst); | 636 ComputeBbox(points, glyf_dst); |
637 size_t offset = kEndPtsOfContoursOffset; | 637 size_t endpts_offset = kEndPtsOfContoursOffset; |
638 int end_point = -1; | 638 int end_point = -1; |
639 for (unsigned int contour_ix = 0; contour_ix < n_contours; ++contour_ix) { | 639 for (unsigned int contour_ix = 0; contour_ix < n_contours; ++contour_ix) { |
640 end_point += n_points_vec.at(contour_ix); | 640 end_point += n_points_vec.at(contour_ix); |
641 if (end_point >= 65536) { | 641 if (end_point >= 65536) { |
642 return OTS_FAILURE(); | 642 return OTS_FAILURE(); |
643 } | 643 } |
644 offset = StoreU16(glyf_dst, offset, static_cast<uint16_t>(end_point)); | 644 endpts_offset = StoreU16(glyf_dst, endpts_offset, static_cast<uint16_t>(
end_point)); |
645 } | 645 } |
646 if (!flag_stream.Skip(flag_size)) { | 646 if (!flag_stream.Skip(flag_size)) { |
647 return OTS_FAILURE(); | 647 return OTS_FAILURE(); |
648 } | 648 } |
649 if (!glyph_stream.Skip(triplet_bytes_consumed)) { | 649 if (!glyph_stream.Skip(triplet_bytes_consumed)) { |
650 return OTS_FAILURE(); | 650 return OTS_FAILURE(); |
651 } | 651 } |
652 uint16_t instruction_size; | 652 uint16_t instruction_size; |
653 if (!Read255UShort(&glyph_stream, &instruction_size)) { | 653 if (!Read255UShort(&glyph_stream, &instruction_size)) { |
654 return OTS_FAILURE(); | 654 return OTS_FAILURE(); |
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
863 } | 863 } |
864 return total_length; | 864 return total_length; |
865 } | 865 } |
866 | 866 |
867 bool ConvertWOFF2ToTTF(uint8_t* result, size_t result_length, | 867 bool ConvertWOFF2ToTTF(uint8_t* result, size_t result_length, |
868 const uint8_t* data, size_t length) { | 868 const uint8_t* data, size_t length) { |
869 static const uint32_t kWoff2Signature = 0x774f4632; // "wOF2" | 869 static const uint32_t kWoff2Signature = 0x774f4632; // "wOF2" |
870 ots::Buffer file(data, length); | 870 ots::Buffer file(data, length); |
871 | 871 |
872 uint32_t signature; | 872 uint32_t signature; |
873 uint32_t flavor; | 873 uint32_t flavor = 0; |
874 if (!file.ReadU32(&signature) || signature != kWoff2Signature || | 874 if (!file.ReadU32(&signature) || signature != kWoff2Signature || |
875 !file.ReadU32(&flavor)) { | 875 !file.ReadU32(&flavor)) { |
876 return OTS_FAILURE(); | 876 return OTS_FAILURE(); |
877 } | 877 } |
878 | 878 |
879 if (!IsValidVersionTag(ntohl(flavor))) { | 879 if (!IsValidVersionTag(ntohl(flavor))) { |
880 return OTS_FAILURE(); | 880 return OTS_FAILURE(); |
881 } | 881 } |
882 | 882 |
883 uint32_t reported_length; | 883 uint32_t reported_length; |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1034 if (transform_buf > &uncompressed_buf[0] + uncompressed_buf.size()) { | 1034 if (transform_buf > &uncompressed_buf[0] + uncompressed_buf.size()) { |
1035 return OTS_FAILURE(); | 1035 return OTS_FAILURE(); |
1036 } | 1036 } |
1037 } | 1037 } |
1038 } | 1038 } |
1039 | 1039 |
1040 return FixChecksums(tables, result); | 1040 return FixChecksums(tables, result); |
1041 } | 1041 } |
1042 | 1042 |
1043 } // namespace ots | 1043 } // namespace ots |
OLD | NEW |