| 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> |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 140 FX_DWORD& src_size, | 140 FX_DWORD& src_size, |
| 141 FX_BOOL bEarlyChange) { | 141 FX_BOOL bEarlyChange) { |
| 142 m_CodeLen = 9; | 142 m_CodeLen = 9; |
| 143 m_InPos = 0; | 143 m_InPos = 0; |
| 144 m_OutPos = 0; | 144 m_OutPos = 0; |
| 145 m_pInput = src_buf; | 145 m_pInput = src_buf; |
| 146 m_pOutput = dest_buf; | 146 m_pOutput = dest_buf; |
| 147 m_Early = bEarlyChange ? 1 : 0; | 147 m_Early = bEarlyChange ? 1 : 0; |
| 148 m_nCodes = 0; | 148 m_nCodes = 0; |
| 149 FX_DWORD old_code = (FX_DWORD)-1; | 149 FX_DWORD old_code = (FX_DWORD)-1; |
| 150 uint8_t last_char; | 150 uint8_t last_char = 0; |
| 151 while (1) { | 151 while (1) { |
| 152 if (m_InPos + m_CodeLen > src_size * 8) { | 152 if (m_InPos + m_CodeLen > src_size * 8) { |
| 153 break; | 153 break; |
| 154 } | 154 } |
| 155 int byte_pos = m_InPos / 8; | 155 int byte_pos = m_InPos / 8; |
| 156 int bit_pos = m_InPos % 8, bit_left = m_CodeLen; | 156 int bit_pos = m_InPos % 8, bit_left = m_CodeLen; |
| 157 FX_DWORD code = 0; | 157 FX_DWORD code = 0; |
| 158 if (bit_pos) { | 158 if (bit_pos) { |
| 159 bit_left -= 8 - bit_pos; | 159 bit_left -= 8 - bit_pos; |
| 160 code = (m_pInput[byte_pos++] & ((1 << (8 - bit_pos)) - 1)) << bit_left; | 160 code = (m_pInput[byte_pos++] & ((1 << (8 - bit_pos)) - 1)) << bit_left; |
| (...skipping 774 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 935 predictor_type = 1; | 935 predictor_type = 1; |
| 936 } | 936 } |
| 937 } | 937 } |
| 938 if (bLZW) { | 938 if (bLZW) { |
| 939 { | 939 { |
| 940 std::unique_ptr<CLZWDecoder> decoder(new CLZWDecoder); | 940 std::unique_ptr<CLZWDecoder> decoder(new CLZWDecoder); |
| 941 dest_size = (FX_DWORD)-1; | 941 dest_size = (FX_DWORD)-1; |
| 942 offset = src_size; | 942 offset = src_size; |
| 943 int err = decoder->Decode(NULL, dest_size, src_buf, offset, bEarlyChange); | 943 int err = decoder->Decode(NULL, dest_size, src_buf, offset, bEarlyChange); |
| 944 if (err || dest_size == 0 || dest_size + 1 < dest_size) { | 944 if (err || dest_size == 0 || dest_size + 1 < dest_size) { |
| 945 return -1; | 945 return static_cast<FX_DWORD>(-1); |
| 946 } | 946 } |
| 947 } | 947 } |
| 948 { | 948 { |
| 949 std::unique_ptr<CLZWDecoder> decoder(new CLZWDecoder); | 949 std::unique_ptr<CLZWDecoder> decoder(new CLZWDecoder); |
| 950 dest_buf = FX_Alloc(uint8_t, dest_size + 1); | 950 dest_buf = FX_Alloc(uint8_t, dest_size + 1); |
| 951 dest_buf[dest_size] = '\0'; | 951 dest_buf[dest_size] = '\0'; |
| 952 decoder->Decode(dest_buf, dest_size, src_buf, offset, bEarlyChange); | 952 decoder->Decode(dest_buf, dest_size, src_buf, offset, bEarlyChange); |
| 953 } | 953 } |
| 954 } else { | 954 } else { |
| 955 FlateUncompress(src_buf, src_size, estimated_size, dest_buf, dest_size, | 955 FlateUncompress(src_buf, src_size, estimated_size, dest_buf, dest_size, |
| 956 offset); | 956 offset); |
| 957 } | 957 } |
| 958 if (predictor_type == 0) { | 958 if (predictor_type == 0) { |
| 959 return offset; | 959 return offset; |
| 960 } | 960 } |
| 961 FX_BOOL ret = TRUE; | 961 FX_BOOL ret = TRUE; |
| 962 if (predictor_type == 2) { | 962 if (predictor_type == 2) { |
| 963 ret = PNG_Predictor(dest_buf, dest_size, Colors, BitsPerComponent, Columns); | 963 ret = PNG_Predictor(dest_buf, dest_size, Colors, BitsPerComponent, Columns); |
| 964 } else if (predictor_type == 1) { | 964 } else if (predictor_type == 1) { |
| 965 ret = | 965 ret = |
| 966 TIFF_Predictor(dest_buf, dest_size, Colors, BitsPerComponent, Columns); | 966 TIFF_Predictor(dest_buf, dest_size, Colors, BitsPerComponent, Columns); |
| 967 } | 967 } |
| 968 return ret ? offset : -1; | 968 return ret ? offset : static_cast<FX_DWORD>(-1); |
| 969 } | 969 } |
| 970 FX_BOOL CCodec_FlateModule::Encode(const uint8_t* src_buf, | 970 FX_BOOL CCodec_FlateModule::Encode(const uint8_t* src_buf, |
| 971 FX_DWORD src_size, | 971 FX_DWORD src_size, |
| 972 int predictor, | 972 int predictor, |
| 973 int Colors, | 973 int Colors, |
| 974 int BitsPerComponent, | 974 int BitsPerComponent, |
| 975 int Columns, | 975 int Columns, |
| 976 uint8_t*& dest_buf, | 976 uint8_t*& dest_buf, |
| 977 FX_DWORD& dest_size) { | 977 FX_DWORD& dest_size) { |
| 978 if (predictor != 2 && predictor < 10) { | 978 if (predictor != 2 && predictor < 10) { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 998 FX_DWORD src_size, | 998 FX_DWORD src_size, |
| 999 uint8_t*& dest_buf, | 999 uint8_t*& dest_buf, |
| 1000 FX_DWORD& dest_size) { | 1000 FX_DWORD& dest_size) { |
| 1001 dest_size = src_size + src_size / 1000 + 12; | 1001 dest_size = src_size + src_size / 1000 + 12; |
| 1002 dest_buf = FX_Alloc(uint8_t, dest_size); | 1002 dest_buf = FX_Alloc(uint8_t, dest_size); |
| 1003 unsigned long temp_size = dest_size; | 1003 unsigned long temp_size = dest_size; |
| 1004 FPDFAPI_FlateCompress(dest_buf, &temp_size, src_buf, src_size); | 1004 FPDFAPI_FlateCompress(dest_buf, &temp_size, src_buf, src_size); |
| 1005 dest_size = (FX_DWORD)temp_size; | 1005 dest_size = (FX_DWORD)temp_size; |
| 1006 return TRUE; | 1006 return TRUE; |
| 1007 } | 1007 } |
| OLD | NEW |