| 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 = (FX_DWORD)-1; | 942 dest_size = (FX_DWORD)-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<FX_DWORD>(-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<FX_DWORD>(-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 FX_DWORD src_size, | 972 FX_DWORD 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 FX_DWORD& dest_size) { | 978 FX_DWORD& dest_size) { |
| 978 if (predictor != 2 && predictor < 10) { | 979 if (predictor != 2 && predictor < 10) { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 998 FX_DWORD src_size, | 999 FX_DWORD src_size, |
| 999 uint8_t*& dest_buf, | 1000 uint8_t*& dest_buf, |
| 1000 FX_DWORD& dest_size) { | 1001 FX_DWORD& 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 = (FX_DWORD)temp_size; | 1006 dest_size = (FX_DWORD)temp_size; |
| 1006 return TRUE; | 1007 return TRUE; |
| 1007 } | 1008 } |
| OLD | NEW |