| 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 "../../../../third_party/base/nonstd_unique_ptr.h" | 7 #include "../../../../third_party/base/nonstd_unique_ptr.h" |
| 8 #include "../../../include/fxcodec/fx_codec.h" | 8 #include "../../../include/fxcodec/fx_codec.h" |
| 9 #include "../../fx_zlib.h" | 9 #include "../../fx_zlib.h" |
| 10 #include "codec_int.h" | 10 #include "codec_int.h" |
| 11 | 11 |
| 12 extern "C" | 12 extern "C" |
| 13 { | 13 { |
| 14 static void* my_alloc_func (void* opaque, unsigned int items, unsigned int s
ize) | 14 static void* my_alloc_func (void* opaque, unsigned int items, unsigned int s
ize) |
| 15 { | 15 { |
| 16 return FX_Alloc(FX_BYTE, items * size); | 16 return FX_Alloc2D(FX_BYTE, items, size); |
| 17 } | 17 } |
| 18 static void my_free_func (void* opaque, void* address) | 18 static void my_free_func (void* opaque, void* address) |
| 19 { | 19 { |
| 20 FX_Free(address); | 20 FX_Free(address); |
| 21 } | 21 } |
| 22 void* FPDFAPI_FlateInit(void* (*alloc_func)(void*, unsigned int, unsigned in
t), | 22 void* FPDFAPI_FlateInit(void* (*alloc_func)(void*, unsigned int, unsigned in
t), |
| 23 void (*free_func)(void*, void*)) | 23 void (*free_func)(void*, void*)) |
| 24 { | 24 { |
| 25 z_stream* p = (z_stream*)alloc_func(0, 1, sizeof(z_stream)); | 25 z_stream* p = (z_stream*)alloc_func(0, 1, sizeof(z_stream)); |
| 26 if (p == NULL) { | 26 if (p == NULL) { |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 234 static FX_BOOL PNG_PredictorEncode(FX_LPBYTE& data_buf, FX_DWORD& data_size, | 234 static FX_BOOL PNG_PredictorEncode(FX_LPBYTE& data_buf, FX_DWORD& data_size, |
| 235 int predictor, int Colors, | 235 int predictor, int Colors, |
| 236 int BitsPerComponent, int Columns) | 236 int BitsPerComponent, int Columns) |
| 237 { | 237 { |
| 238 const int BytesPerPixel = (Colors * BitsPerComponent + 7) / 8; | 238 const int BytesPerPixel = (Colors * BitsPerComponent + 7) / 8; |
| 239 const int row_size = (Colors * BitsPerComponent * Columns + 7) / 8; | 239 const int row_size = (Colors * BitsPerComponent * Columns + 7) / 8; |
| 240 if (row_size <= 0) | 240 if (row_size <= 0) |
| 241 return FALSE; | 241 return FALSE; |
| 242 const int row_count = (data_size + row_size - 1) / row_size; | 242 const int row_count = (data_size + row_size - 1) / row_size; |
| 243 const int last_row_size = data_size % row_size; | 243 const int last_row_size = data_size % row_size; |
| 244 FX_LPBYTE dest_buf = FX_Alloc( FX_BYTE, (row_size + 1) * row_count); | 244 FX_LPBYTE dest_buf = FX_Alloc2D(FX_BYTE, row_size + 1, row_count); |
| 245 if (dest_buf == NULL) | |
| 246 return FALSE; | |
| 247 int byte_cnt = 0; | 245 int byte_cnt = 0; |
| 248 FX_LPBYTE pSrcData = data_buf; | 246 FX_LPBYTE pSrcData = data_buf; |
| 249 FX_LPBYTE pDestData = dest_buf; | 247 FX_LPBYTE pDestData = dest_buf; |
| 250 for (int row = 0; row < row_count; row++) { | 248 for (int row = 0; row < row_count; row++) { |
| 251 if (predictor == 10) { | 249 if (predictor == 10) { |
| 252 pDestData[0] = 0; | 250 pDestData[0] = 0; |
| 253 int move_size = row_size; | 251 int move_size = row_size; |
| 254 if (move_size * (row + 1) > (int)data_size) { | 252 if (move_size * (row + 1) > (int)data_size) { |
| 255 move_size = data_size - (move_size * row); | 253 move_size = data_size - (move_size * row); |
| 256 } | 254 } |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 390 } | 388 } |
| 391 static FX_BOOL PNG_Predictor(FX_LPBYTE& data_buf, FX_DWORD& data_size, | 389 static FX_BOOL PNG_Predictor(FX_LPBYTE& data_buf, FX_DWORD& data_size, |
| 392 int Colors, int BitsPerComponent, int Columns) | 390 int Colors, int BitsPerComponent, int Columns) |
| 393 { | 391 { |
| 394 const int BytesPerPixel = (Colors * BitsPerComponent + 7) / 8; | 392 const int BytesPerPixel = (Colors * BitsPerComponent + 7) / 8; |
| 395 const int row_size = (Colors * BitsPerComponent * Columns + 7) / 8; | 393 const int row_size = (Colors * BitsPerComponent * Columns + 7) / 8; |
| 396 if (row_size <= 0) | 394 if (row_size <= 0) |
| 397 return FALSE; | 395 return FALSE; |
| 398 const int row_count = (data_size + row_size) / (row_size + 1); | 396 const int row_count = (data_size + row_size) / (row_size + 1); |
| 399 const int last_row_size = data_size % (row_size + 1); | 397 const int last_row_size = data_size % (row_size + 1); |
| 400 FX_LPBYTE dest_buf = FX_Alloc( FX_BYTE, row_size * row_count); | 398 FX_LPBYTE dest_buf = FX_Alloc2D(FX_BYTE, row_size, row_count); |
| 401 if (dest_buf == NULL) | |
| 402 return FALSE; | |
| 403 int byte_cnt = 0; | 399 int byte_cnt = 0; |
| 404 FX_LPBYTE pSrcData = data_buf; | 400 FX_LPBYTE pSrcData = data_buf; |
| 405 FX_LPBYTE pDestData = dest_buf; | 401 FX_LPBYTE pDestData = dest_buf; |
| 406 for (int row = 0; row < row_count; row ++) { | 402 for (int row = 0; row < row_count; row ++) { |
| 407 FX_BYTE tag = pSrcData[0]; | 403 FX_BYTE tag = pSrcData[0]; |
| 408 byte_cnt++; | 404 byte_cnt++; |
| 409 if (tag == 0) { | 405 if (tag == 0) { |
| 410 int move_size = row_size; | 406 int move_size = row_size; |
| 411 if ((row + 1) * (move_size + 1) > (int)data_size) { | 407 if ((row + 1) * (move_size + 1) > (int)data_size) { |
| 412 move_size = last_row_size - 1; | 408 move_size = last_row_size - 1; |
| (...skipping 531 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 944 dest_size = src_size + src_size / 1000 + 12; | 940 dest_size = src_size + src_size / 1000 + 12; |
| 945 dest_buf = FX_Alloc( FX_BYTE, dest_size); | 941 dest_buf = FX_Alloc( FX_BYTE, dest_size); |
| 946 if (dest_buf == NULL) { | 942 if (dest_buf == NULL) { |
| 947 return FALSE; | 943 return FALSE; |
| 948 } | 944 } |
| 949 unsigned long temp_size = dest_size; | 945 unsigned long temp_size = dest_size; |
| 950 FPDFAPI_FlateCompress(dest_buf, &temp_size, src_buf, src_size); | 946 FPDFAPI_FlateCompress(dest_buf, &temp_size, src_buf, src_size); |
| 951 dest_size = (FX_DWORD)temp_size; | 947 dest_size = (FX_DWORD)temp_size; |
| 952 return TRUE; | 948 return TRUE; |
| 953 } | 949 } |
| OLD | NEW |