OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium 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 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "core/fxcodec/codec/codec_int.h" | 7 #include "core/fxcodec/codec/codec_int.h" |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <memory> | 10 #include <memory> |
11 | 11 |
| 12 #include "core/fxcrt/include/fx_ext.h" |
12 #include "core/include/fxcodec/fx_codec.h" | 13 #include "core/include/fxcodec/fx_codec.h" |
13 #include "core/include/fxcodec/fx_codec_flate.h" | 14 #include "core/include/fxcodec/fx_codec_flate.h" |
14 #include "third_party/zlib_v128/zlib.h" | 15 #include "third_party/zlib_v128/zlib.h" |
15 | 16 |
16 extern "C" { | 17 extern "C" { |
17 static void* my_alloc_func(void* opaque, | 18 static void* my_alloc_func(void* opaque, |
18 unsigned int items, | 19 unsigned int items, |
19 unsigned int size) { | 20 unsigned int size) { |
20 return FX_Alloc2D(uint8_t, items, size); | 21 return FX_Alloc2D(uint8_t, items, size); |
21 } | 22 } |
(...skipping 913 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
935 predictor_type = 1; | 936 predictor_type = 1; |
936 } | 937 } |
937 } | 938 } |
938 if (bLZW) { | 939 if (bLZW) { |
939 { | 940 { |
940 std::unique_ptr<CLZWDecoder> decoder(new CLZWDecoder); | 941 std::unique_ptr<CLZWDecoder> decoder(new CLZWDecoder); |
941 dest_size = (uint32_t)-1; | 942 dest_size = (uint32_t)-1; |
942 offset = src_size; | 943 offset = src_size; |
943 int err = decoder->Decode(NULL, dest_size, src_buf, offset, bEarlyChange); | 944 int err = decoder->Decode(NULL, dest_size, src_buf, offset, bEarlyChange); |
944 if (err || dest_size == 0 || dest_size + 1 < dest_size) { | 945 if (err || dest_size == 0 || dest_size + 1 < dest_size) { |
945 return static_cast<uint32_t>(-1); | 946 return FX_INVALID_OFFSET; |
946 } | 947 } |
947 } | 948 } |
948 { | 949 { |
949 std::unique_ptr<CLZWDecoder> decoder(new CLZWDecoder); | 950 std::unique_ptr<CLZWDecoder> decoder(new CLZWDecoder); |
950 dest_buf = FX_Alloc(uint8_t, dest_size + 1); | 951 dest_buf = FX_Alloc(uint8_t, dest_size + 1); |
951 dest_buf[dest_size] = '\0'; | 952 dest_buf[dest_size] = '\0'; |
952 decoder->Decode(dest_buf, dest_size, src_buf, offset, bEarlyChange); | 953 decoder->Decode(dest_buf, dest_size, src_buf, offset, bEarlyChange); |
953 } | 954 } |
954 } else { | 955 } else { |
955 FlateUncompress(src_buf, src_size, estimated_size, dest_buf, dest_size, | 956 FlateUncompress(src_buf, src_size, estimated_size, dest_buf, dest_size, |
956 offset); | 957 offset); |
957 } | 958 } |
958 if (predictor_type == 0) { | 959 if (predictor_type == 0) { |
959 return offset; | 960 return offset; |
960 } | 961 } |
961 FX_BOOL ret = TRUE; | 962 FX_BOOL ret = TRUE; |
962 if (predictor_type == 2) { | 963 if (predictor_type == 2) { |
963 ret = PNG_Predictor(dest_buf, dest_size, Colors, BitsPerComponent, Columns); | 964 ret = PNG_Predictor(dest_buf, dest_size, Colors, BitsPerComponent, Columns); |
964 } else if (predictor_type == 1) { | 965 } else if (predictor_type == 1) { |
965 ret = | 966 ret = |
966 TIFF_Predictor(dest_buf, dest_size, Colors, BitsPerComponent, Columns); | 967 TIFF_Predictor(dest_buf, dest_size, Colors, BitsPerComponent, Columns); |
967 } | 968 } |
968 return ret ? offset : static_cast<uint32_t>(-1); | 969 return ret ? offset : FX_INVALID_OFFSET; |
969 } | 970 } |
970 FX_BOOL CCodec_FlateModule::Encode(const uint8_t* src_buf, | 971 FX_BOOL CCodec_FlateModule::Encode(const uint8_t* src_buf, |
971 uint32_t src_size, | 972 uint32_t src_size, |
972 int predictor, | 973 int predictor, |
973 int Colors, | 974 int Colors, |
974 int BitsPerComponent, | 975 int BitsPerComponent, |
975 int Columns, | 976 int Columns, |
976 uint8_t*& dest_buf, | 977 uint8_t*& dest_buf, |
977 uint32_t& dest_size) { | 978 uint32_t& dest_size) { |
978 if (predictor != 2 && predictor < 10) { | 979 if (predictor != 2 && predictor < 10) { |
(...skipping 19 matching lines...) Expand all Loading... |
998 uint32_t src_size, | 999 uint32_t src_size, |
999 uint8_t*& dest_buf, | 1000 uint8_t*& dest_buf, |
1000 uint32_t& dest_size) { | 1001 uint32_t& dest_size) { |
1001 dest_size = src_size + src_size / 1000 + 12; | 1002 dest_size = src_size + src_size / 1000 + 12; |
1002 dest_buf = FX_Alloc(uint8_t, dest_size); | 1003 dest_buf = FX_Alloc(uint8_t, dest_size); |
1003 unsigned long temp_size = dest_size; | 1004 unsigned long temp_size = dest_size; |
1004 FPDFAPI_FlateCompress(dest_buf, &temp_size, src_buf, src_size); | 1005 FPDFAPI_FlateCompress(dest_buf, &temp_size, src_buf, src_size); |
1005 dest_size = (uint32_t)temp_size; | 1006 dest_size = (uint32_t)temp_size; |
1006 return TRUE; | 1007 return TRUE; |
1007 } | 1008 } |
OLD | NEW |