Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(213)

Side by Side Diff: core/src/fpdfapi/fpdf_parser/fpdf_parser_decode.cpp

Issue 306923006: Use unsigned type for iteration to avoid int overflow. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: make max_chars unsigned too. Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "../../../include/fpdfapi/fpdf_parser.h" 7 #include "../../../include/fpdfapi/fpdf_parser.h"
8 #include "../../../include/fpdfapi/fpdf_module.h" 8 #include "../../../include/fpdfapi/fpdf_module.h"
9 #include "../../../include/fxcodec/fx_codec.h" 9 #include "../../../include/fxcodec/fx_codec.h"
10 #include <limits.h> 10 #include <limits.h>
11 #define _STREAM_MAX_SIZE_ 20 * 1024 * 1024 11 #define _STREAM_MAX_SIZE_ 20 * 1024 * 1024
12 FX_DWORD _A85Decode(const FX_BYTE* src_buf, FX_DWORD src_size, FX_LPBYTE& dest_b uf, FX_DWORD& dest_size) 12 FX_DWORD _A85Decode(const FX_BYTE* src_buf, FX_DWORD src_size, FX_LPBYTE& dest_b uf, FX_DWORD& dest_size)
13 { 13 {
14 dest_size = 0; 14 dest_size = 0;
(...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 0x00dc, 0x00dd, 0x00de, 0x00df, 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00 e5, 395 0x00dc, 0x00dd, 0x00de, 0x00df, 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00 e5,
396 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00 ef, 396 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00 ef,
397 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, 0x00f8, 0x00 f9, 397 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, 0x00f8, 0x00 f9,
398 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff 398 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff
399 }; 399 };
400 CFX_WideString PDF_DecodeText(FX_LPCBYTE src_data, FX_DWORD src_len, CFX_CharMap * pCharMap) 400 CFX_WideString PDF_DecodeText(FX_LPCBYTE src_data, FX_DWORD src_len, CFX_CharMap * pCharMap)
401 { 401 {
402 CFX_WideString result; 402 CFX_WideString result;
403 if (src_len >= 2 && ((src_data[0] == 0xfe && src_data[1] == 0xff) || (src_da ta[0] == 0xff && src_data[1] == 0xfe))) { 403 if (src_len >= 2 && ((src_data[0] == 0xfe && src_data[1] == 0xff) || (src_da ta[0] == 0xff && src_data[1] == 0xfe))) {
404 FX_BOOL bBE = src_data[0] == 0xfe; 404 FX_BOOL bBE = src_data[0] == 0xfe;
405 int max_chars = (src_len - 2) / 2; 405 FX_DWORD max_chars = (src_len - 2) / 2;
406 if (!max_chars) { 406 if (!max_chars) {
407 return result; 407 return result;
408 } 408 }
409 if (src_data[0] == 0xff) { 409 if (src_data[0] == 0xff) {
410 bBE = !src_data[2]; 410 bBE = !src_data[2];
411 } 411 }
412 FX_LPWSTR dest_buf = result.GetBuffer(max_chars); 412 FX_LPWSTR dest_buf = result.GetBuffer(max_chars);
413 FX_LPCBYTE uni_str = src_data + 2; 413 FX_LPCBYTE uni_str = src_data + 2;
414 int dest_pos = 0; 414 int dest_pos = 0;
415 for (int i = 0; i < max_chars * 2; i += 2) { 415 for (FX_DWORD i = 0; i < max_chars * 2; i += 2) {
416 FX_WORD unicode = bBE ? (uni_str[i] << 8 | uni_str[i + 1]) : (uni_st r[i + 1] << 8 | uni_str[i]); 416 FX_WORD unicode = bBE ? (uni_str[i] << 8 | uni_str[i + 1]) : (uni_st r[i + 1] << 8 | uni_str[i]);
417 if (unicode == 0x1b) { 417 if (unicode == 0x1b) {
418 i += 2; 418 i += 2;
419 while (i < max_chars * 2) { 419 while (i < max_chars * 2) {
420 FX_WORD unicode = bBE ? (uni_str[i] << 8 | uni_str[i + 1]) : (uni_str[i + 1] << 8 | uni_str[i]); 420 FX_WORD unicode = bBE ? (uni_str[i] << 8 | uni_str[i + 1]) : (uni_str[i + 1] << 8 | uni_str[i]);
421 i += 2; 421 i += 2;
422 if (unicode == 0x1b) { 422 if (unicode == 0x1b) {
423 break; 423 break;
424 } 424 }
425 } 425 }
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 } 525 }
526 } 526 }
527 FX_DWORD FlateDecode(const FX_BYTE* src_buf, FX_DWORD src_size, FX_LPBYTE& dest_ buf, FX_DWORD& dest_size) 527 FX_DWORD FlateDecode(const FX_BYTE* src_buf, FX_DWORD src_size, FX_LPBYTE& dest_ buf, FX_DWORD& dest_size)
528 { 528 {
529 CCodec_ModuleMgr* pEncoders = CPDF_ModuleMgr::Get()->GetCodecModule(); 529 CCodec_ModuleMgr* pEncoders = CPDF_ModuleMgr::Get()->GetCodecModule();
530 if (pEncoders) { 530 if (pEncoders) {
531 return pEncoders->GetFlateModule()->FlateOrLZWDecode(FALSE, src_buf, src _size, FALSE, 0, 0, 0, 0, 0, dest_buf, dest_size); 531 return pEncoders->GetFlateModule()->FlateOrLZWDecode(FALSE, src_buf, src _size, FALSE, 0, 0, 0, 0, 0, dest_buf, dest_size);
532 } 532 }
533 return 0; 533 return 0;
534 } 534 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698