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

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

Issue 1832173003: Remove FX_DWORD from core/ and delete definition (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 4 years, 9 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
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 "core/fpdfapi/fpdf_parser/include/fpdf_parser_decode.h" 7 #include "core/fpdfapi/fpdf_parser/include/fpdf_parser_decode.h"
8 8
9 #include <limits.h> 9 #include <limits.h>
10 #include <vector> 10 #include <vector>
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 43 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc,
44 0x00bd, 0x00be, 0x00bf, 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 44 0x00bd, 0x00be, 0x00bf, 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5,
45 0x00c6, 0x00c7, 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 45 0x00c6, 0x00c7, 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce,
46 0x00cf, 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, 46 0x00cf, 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7,
47 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, 0x00e0, 47 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, 0x00e0,
48 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, 48 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9,
49 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, 0x00f0, 0x00f1, 0x00f2, 49 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, 0x00f0, 0x00f1, 0x00f2,
50 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 50 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb,
51 0x00fc, 0x00fd, 0x00fe, 0x00ff}; 51 0x00fc, 0x00fd, 0x00fe, 0x00ff};
52 52
53 FX_DWORD A85Decode(const uint8_t* src_buf, 53 uint32_t A85Decode(const uint8_t* src_buf,
54 FX_DWORD src_size, 54 uint32_t src_size,
55 uint8_t*& dest_buf, 55 uint8_t*& dest_buf,
56 FX_DWORD& dest_size) { 56 uint32_t& dest_size) {
57 dest_size = 0; 57 dest_size = 0;
58 dest_buf = nullptr; 58 dest_buf = nullptr;
59 if (src_size == 0) 59 if (src_size == 0)
60 return 0; 60 return 0;
61 61
62 // Count legal characters and zeros. 62 // Count legal characters and zeros.
63 FX_DWORD zcount = 0; 63 uint32_t zcount = 0;
64 FX_DWORD pos = 0; 64 uint32_t pos = 0;
65 while (pos < src_size) { 65 while (pos < src_size) {
66 uint8_t ch = src_buf[pos]; 66 uint8_t ch = src_buf[pos];
67 if (ch == 'z') { 67 if (ch == 'z') {
68 zcount++; 68 zcount++;
69 } else if ((ch < '!' || ch > 'u') && !PDFCharIsLineEnding(ch) && 69 } else if ((ch < '!' || ch > 'u') && !PDFCharIsLineEnding(ch) &&
70 ch != ' ' && ch != '\t') { 70 ch != ' ' && ch != '\t') {
71 break; 71 break;
72 } 72 }
73 pos++; 73 pos++;
74 } 74 }
75 // No content to decode. 75 // No content to decode.
76 if (pos == 0) 76 if (pos == 0)
77 return 0; 77 return 0;
78 78
79 // Count the space needed to contain non-zero characters. The encoding ratio 79 // Count the space needed to contain non-zero characters. The encoding ratio
80 // of Ascii85 is 4:5. 80 // of Ascii85 is 4:5.
81 FX_DWORD space_for_non_zeroes = (pos - zcount) / 5 * 4 + 4; 81 uint32_t space_for_non_zeroes = (pos - zcount) / 5 * 4 + 4;
82 if (zcount > (UINT_MAX - space_for_non_zeroes) / 4) { 82 if (zcount > (UINT_MAX - space_for_non_zeroes) / 4) {
83 return (FX_DWORD)-1; 83 return (uint32_t)-1;
84 } 84 }
85 dest_buf = FX_Alloc(uint8_t, zcount * 4 + space_for_non_zeroes); 85 dest_buf = FX_Alloc(uint8_t, zcount * 4 + space_for_non_zeroes);
86 size_t state = 0; 86 size_t state = 0;
87 uint32_t res = 0; 87 uint32_t res = 0;
88 pos = dest_size = 0; 88 pos = dest_size = 0;
89 while (pos < src_size) { 89 while (pos < src_size) {
90 uint8_t ch = src_buf[pos++]; 90 uint8_t ch = src_buf[pos++];
91 if (PDFCharIsLineEnding(ch) || ch == ' ' || ch == '\t') 91 if (PDFCharIsLineEnding(ch) || ch == ' ' || ch == '\t')
92 continue; 92 continue;
93 93
(...skipping 22 matching lines...) Expand all
116 for (size_t i = state; i < 5; i++) 116 for (size_t i = state; i < 5; i++)
117 res = res * 85 + 84; 117 res = res * 85 + 84;
118 for (size_t i = 0; i < state - 1; i++) 118 for (size_t i = 0; i < state - 1; i++)
119 dest_buf[dest_size++] = (uint8_t)(res >> (3 - i) * 8); 119 dest_buf[dest_size++] = (uint8_t)(res >> (3 - i) * 8);
120 } 120 }
121 if (pos < src_size && src_buf[pos] == '>') 121 if (pos < src_size && src_buf[pos] == '>')
122 pos++; 122 pos++;
123 return pos; 123 return pos;
124 } 124 }
125 125
126 FX_DWORD HexDecode(const uint8_t* src_buf, 126 uint32_t HexDecode(const uint8_t* src_buf,
127 FX_DWORD src_size, 127 uint32_t src_size,
128 uint8_t*& dest_buf, 128 uint8_t*& dest_buf,
129 FX_DWORD& dest_size) { 129 uint32_t& dest_size) {
130 dest_size = 0; 130 dest_size = 0;
131 if (src_size == 0) { 131 if (src_size == 0) {
132 dest_buf = nullptr; 132 dest_buf = nullptr;
133 return 0; 133 return 0;
134 } 134 }
135 135
136 FX_DWORD i = 0; 136 uint32_t i = 0;
137 // Find the end of data. 137 // Find the end of data.
138 while (i < src_size && src_buf[i] != '>') 138 while (i < src_size && src_buf[i] != '>')
139 i++; 139 i++;
140 140
141 dest_buf = FX_Alloc(uint8_t, i / 2 + 1); 141 dest_buf = FX_Alloc(uint8_t, i / 2 + 1);
142 bool bFirst = true; 142 bool bFirst = true;
143 for (i = 0; i < src_size; i++) { 143 for (i = 0; i < src_size; i++) {
144 uint8_t ch = src_buf[i]; 144 uint8_t ch = src_buf[i];
145 if (PDFCharIsLineEnding(ch) || ch == ' ' || ch == '\t') 145 if (PDFCharIsLineEnding(ch) || ch == ' ' || ch == '\t')
146 continue; 146 continue;
(...skipping 11 matching lines...) Expand all
158 else 158 else
159 dest_buf[dest_size++] += digit; 159 dest_buf[dest_size++] += digit;
160 160
161 bFirst = !bFirst; 161 bFirst = !bFirst;
162 } 162 }
163 if (!bFirst) 163 if (!bFirst)
164 dest_size++; 164 dest_size++;
165 return i; 165 return i;
166 } 166 }
167 167
168 FX_DWORD RunLengthDecode(const uint8_t* src_buf, 168 uint32_t RunLengthDecode(const uint8_t* src_buf,
169 FX_DWORD src_size, 169 uint32_t src_size,
170 uint8_t*& dest_buf, 170 uint8_t*& dest_buf,
171 FX_DWORD& dest_size) { 171 uint32_t& dest_size) {
172 FX_DWORD i = 0; 172 uint32_t i = 0;
173 FX_DWORD old; 173 uint32_t old;
174 dest_size = 0; 174 dest_size = 0;
175 while (i < src_size) { 175 while (i < src_size) {
176 if (src_buf[i] < 128) { 176 if (src_buf[i] < 128) {
177 old = dest_size; 177 old = dest_size;
178 dest_size += src_buf[i] + 1; 178 dest_size += src_buf[i] + 1;
179 if (dest_size < old) { 179 if (dest_size < old) {
180 return static_cast<FX_DWORD>(-1); 180 return static_cast<uint32_t>(-1);
181 } 181 }
182 i += src_buf[i] + 2; 182 i += src_buf[i] + 2;
183 } else if (src_buf[i] > 128) { 183 } else if (src_buf[i] > 128) {
184 old = dest_size; 184 old = dest_size;
185 dest_size += 257 - src_buf[i]; 185 dest_size += 257 - src_buf[i];
186 if (dest_size < old) { 186 if (dest_size < old) {
187 return static_cast<FX_DWORD>(-1); 187 return static_cast<uint32_t>(-1);
188 } 188 }
189 i += 2; 189 i += 2;
190 } else { 190 } else {
191 break; 191 break;
192 } 192 }
193 } 193 }
194 if (dest_size >= _STREAM_MAX_SIZE_) { 194 if (dest_size >= _STREAM_MAX_SIZE_) {
195 return static_cast<FX_DWORD>(-1); 195 return static_cast<uint32_t>(-1);
196 } 196 }
197 dest_buf = FX_Alloc(uint8_t, dest_size); 197 dest_buf = FX_Alloc(uint8_t, dest_size);
198 i = 0; 198 i = 0;
199 int dest_count = 0; 199 int dest_count = 0;
200 while (i < src_size) { 200 while (i < src_size) {
201 if (src_buf[i] < 128) { 201 if (src_buf[i] < 128) {
202 FX_DWORD copy_len = src_buf[i] + 1; 202 uint32_t copy_len = src_buf[i] + 1;
203 FX_DWORD buf_left = src_size - i - 1; 203 uint32_t buf_left = src_size - i - 1;
204 if (buf_left < copy_len) { 204 if (buf_left < copy_len) {
205 FX_DWORD delta = copy_len - buf_left; 205 uint32_t delta = copy_len - buf_left;
206 copy_len = buf_left; 206 copy_len = buf_left;
207 FXSYS_memset(dest_buf + dest_count + copy_len, '\0', delta); 207 FXSYS_memset(dest_buf + dest_count + copy_len, '\0', delta);
208 } 208 }
209 FXSYS_memcpy(dest_buf + dest_count, src_buf + i + 1, copy_len); 209 FXSYS_memcpy(dest_buf + dest_count, src_buf + i + 1, copy_len);
210 dest_count += src_buf[i] + 1; 210 dest_count += src_buf[i] + 1;
211 i += src_buf[i] + 2; 211 i += src_buf[i] + 2;
212 } else if (src_buf[i] > 128) { 212 } else if (src_buf[i] > 128) {
213 int fill = 0; 213 int fill = 0;
214 if (i < src_size - 1) { 214 if (i < src_size - 1) {
215 fill = src_buf[i + 1]; 215 fill = src_buf[i + 1];
216 } 216 }
217 FXSYS_memset(dest_buf + dest_count, fill, 257 - src_buf[i]); 217 FXSYS_memset(dest_buf + dest_count, fill, 257 - src_buf[i]);
218 dest_count += 257 - src_buf[i]; 218 dest_count += 257 - src_buf[i];
219 i += 2; 219 i += 2;
220 } else { 220 } else {
221 break; 221 break;
222 } 222 }
223 } 223 }
224 FX_DWORD ret = i + 1; 224 uint32_t ret = i + 1;
225 if (ret > src_size) { 225 if (ret > src_size) {
226 ret = src_size; 226 ret = src_size;
227 } 227 }
228 return ret; 228 return ret;
229 } 229 }
230 230
231 ICodec_ScanlineDecoder* FPDFAPI_CreateFaxDecoder( 231 ICodec_ScanlineDecoder* FPDFAPI_CreateFaxDecoder(
232 const uint8_t* src_buf, 232 const uint8_t* src_buf,
233 FX_DWORD src_size, 233 uint32_t src_size,
234 int width, 234 int width,
235 int height, 235 int height,
236 const CPDF_Dictionary* pParams) { 236 const CPDF_Dictionary* pParams) {
237 int K = 0; 237 int K = 0;
238 FX_BOOL EndOfLine = FALSE; 238 FX_BOOL EndOfLine = FALSE;
239 FX_BOOL ByteAlign = FALSE; 239 FX_BOOL ByteAlign = FALSE;
240 FX_BOOL BlackIs1 = FALSE; 240 FX_BOOL BlackIs1 = FALSE;
241 int Columns = 1728; 241 int Columns = 1728;
242 int Rows = 0; 242 int Rows = 0;
243 if (pParams) { 243 if (pParams) {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 } 276 }
277 check *= BitsPerComponent; 277 check *= BitsPerComponent;
278 if (check > INT_MAX - 7) { 278 if (check > INT_MAX - 7) {
279 return FALSE; 279 return FALSE;
280 } 280 }
281 return TRUE; 281 return TRUE;
282 } 282 }
283 283
284 ICodec_ScanlineDecoder* FPDFAPI_CreateFlateDecoder( 284 ICodec_ScanlineDecoder* FPDFAPI_CreateFlateDecoder(
285 const uint8_t* src_buf, 285 const uint8_t* src_buf,
286 FX_DWORD src_size, 286 uint32_t src_size,
287 int width, 287 int width,
288 int height, 288 int height,
289 int nComps, 289 int nComps,
290 int bpc, 290 int bpc,
291 const CPDF_Dictionary* pParams) { 291 const CPDF_Dictionary* pParams) {
292 int predictor = 0; 292 int predictor = 0;
293 int Colors = 0, BitsPerComponent = 0, Columns = 0; 293 int Colors = 0, BitsPerComponent = 0, Columns = 0;
294 if (pParams) { 294 if (pParams) {
295 predictor = pParams->GetIntegerBy("Predictor"); 295 predictor = pParams->GetIntegerBy("Predictor");
296 Colors = pParams->GetIntegerBy("Colors", 1); 296 Colors = pParams->GetIntegerBy("Colors", 1);
297 BitsPerComponent = pParams->GetIntegerBy("BitsPerComponent", 8); 297 BitsPerComponent = pParams->GetIntegerBy("BitsPerComponent", 8);
298 Columns = pParams->GetIntegerBy("Columns", 1); 298 Columns = pParams->GetIntegerBy("Columns", 1);
299 if (!CheckFlateDecodeParams(Colors, BitsPerComponent, Columns)) { 299 if (!CheckFlateDecodeParams(Colors, BitsPerComponent, Columns)) {
300 return nullptr; 300 return nullptr;
301 } 301 }
302 } 302 }
303 return CPDF_ModuleMgr::Get()->GetFlateModule()->CreateDecoder( 303 return CPDF_ModuleMgr::Get()->GetFlateModule()->CreateDecoder(
304 src_buf, src_size, width, height, nComps, bpc, predictor, Colors, 304 src_buf, src_size, width, height, nComps, bpc, predictor, Colors,
305 BitsPerComponent, Columns); 305 BitsPerComponent, Columns);
306 } 306 }
307 307
308 FX_DWORD FPDFAPI_FlateOrLZWDecode(FX_BOOL bLZW, 308 uint32_t FPDFAPI_FlateOrLZWDecode(FX_BOOL bLZW,
309 const uint8_t* src_buf, 309 const uint8_t* src_buf,
310 FX_DWORD src_size, 310 uint32_t src_size,
311 CPDF_Dictionary* pParams, 311 CPDF_Dictionary* pParams,
312 FX_DWORD estimated_size, 312 uint32_t estimated_size,
313 uint8_t*& dest_buf, 313 uint8_t*& dest_buf,
314 FX_DWORD& dest_size) { 314 uint32_t& dest_size) {
315 int predictor = 0; 315 int predictor = 0;
316 FX_BOOL bEarlyChange = TRUE; 316 FX_BOOL bEarlyChange = TRUE;
317 int Colors = 0, BitsPerComponent = 0, Columns = 0; 317 int Colors = 0, BitsPerComponent = 0, Columns = 0;
318 if (pParams) { 318 if (pParams) {
319 predictor = pParams->GetIntegerBy("Predictor"); 319 predictor = pParams->GetIntegerBy("Predictor");
320 bEarlyChange = pParams->GetIntegerBy("EarlyChange", 1); 320 bEarlyChange = pParams->GetIntegerBy("EarlyChange", 1);
321 Colors = pParams->GetIntegerBy("Colors", 1); 321 Colors = pParams->GetIntegerBy("Colors", 1);
322 BitsPerComponent = pParams->GetIntegerBy("BitsPerComponent", 8); 322 BitsPerComponent = pParams->GetIntegerBy("BitsPerComponent", 8);
323 Columns = pParams->GetIntegerBy("Columns", 1); 323 Columns = pParams->GetIntegerBy("Columns", 1);
324 if (!CheckFlateDecodeParams(Colors, BitsPerComponent, Columns)) { 324 if (!CheckFlateDecodeParams(Colors, BitsPerComponent, Columns)) {
325 return (FX_DWORD)-1; 325 return (uint32_t)-1;
326 } 326 }
327 } 327 }
328 return CPDF_ModuleMgr::Get()->GetFlateModule()->FlateOrLZWDecode( 328 return CPDF_ModuleMgr::Get()->GetFlateModule()->FlateOrLZWDecode(
329 bLZW, src_buf, src_size, bEarlyChange, predictor, Colors, 329 bLZW, src_buf, src_size, bEarlyChange, predictor, Colors,
330 BitsPerComponent, Columns, estimated_size, dest_buf, dest_size); 330 BitsPerComponent, Columns, estimated_size, dest_buf, dest_size);
331 } 331 }
332 332
333 FX_BOOL PDF_DataDecode(const uint8_t* src_buf, 333 FX_BOOL PDF_DataDecode(const uint8_t* src_buf,
334 FX_DWORD src_size, 334 uint32_t src_size,
335 const CPDF_Dictionary* pDict, 335 const CPDF_Dictionary* pDict,
336 uint8_t*& dest_buf, 336 uint8_t*& dest_buf,
337 FX_DWORD& dest_size, 337 uint32_t& dest_size,
338 CFX_ByteString& ImageEncoding, 338 CFX_ByteString& ImageEncoding,
339 CPDF_Dictionary*& pImageParms, 339 CPDF_Dictionary*& pImageParms,
340 FX_DWORD last_estimated_size, 340 uint32_t last_estimated_size,
341 FX_BOOL bImageAcc) { 341 FX_BOOL bImageAcc) {
342 CPDF_Object* pDecoder = pDict ? pDict->GetElementValue("Filter") : nullptr; 342 CPDF_Object* pDecoder = pDict ? pDict->GetElementValue("Filter") : nullptr;
343 if (!pDecoder || (!pDecoder->IsArray() && !pDecoder->IsName())) 343 if (!pDecoder || (!pDecoder->IsArray() && !pDecoder->IsName()))
344 return FALSE; 344 return FALSE;
345 345
346 CPDF_Object* pParams = 346 CPDF_Object* pParams =
347 pDict ? pDict->GetElementValue("DecodeParms") : nullptr; 347 pDict ? pDict->GetElementValue("DecodeParms") : nullptr;
348 std::vector<CFX_ByteString> DecoderList; 348 std::vector<CFX_ByteString> DecoderList;
349 CFX_ArrayTemplate<CPDF_Object*> ParamList; 349 CFX_ArrayTemplate<CPDF_Object*> ParamList;
350 if (CPDF_Array* pDecoders = pDecoder->AsArray()) { 350 if (CPDF_Array* pDecoders = pDecoder->AsArray()) {
351 CPDF_Array* pParamsArray = ToArray(pParams); 351 CPDF_Array* pParamsArray = ToArray(pParams);
352 if (!pParamsArray) 352 if (!pParamsArray)
353 pParams = nullptr; 353 pParams = nullptr;
354 354
355 for (FX_DWORD i = 0; i < pDecoders->GetCount(); i++) { 355 for (uint32_t i = 0; i < pDecoders->GetCount(); i++) {
356 DecoderList.push_back(pDecoders->GetConstStringAt(i)); 356 DecoderList.push_back(pDecoders->GetConstStringAt(i));
357 ParamList.Add(pParams ? pParamsArray->GetDictAt(i) : nullptr); 357 ParamList.Add(pParams ? pParamsArray->GetDictAt(i) : nullptr);
358 } 358 }
359 } else { 359 } else {
360 DecoderList.push_back(pDecoder->GetConstString()); 360 DecoderList.push_back(pDecoder->GetConstString());
361 ParamList.Add(pParams ? pParams->GetDict() : nullptr); 361 ParamList.Add(pParams ? pParams->GetDict() : nullptr);
362 } 362 }
363 uint8_t* last_buf = (uint8_t*)src_buf; 363 uint8_t* last_buf = (uint8_t*)src_buf;
364 FX_DWORD last_size = src_size; 364 uint32_t last_size = src_size;
365 int nSize = pdfium::CollectionSize<int>(DecoderList); 365 int nSize = pdfium::CollectionSize<int>(DecoderList);
366 for (int i = 0; i < nSize; i++) { 366 for (int i = 0; i < nSize; i++) {
367 int estimated_size = i == nSize - 1 ? last_estimated_size : 0; 367 int estimated_size = i == nSize - 1 ? last_estimated_size : 0;
368 CFX_ByteString decoder = DecoderList[i]; 368 CFX_ByteString decoder = DecoderList[i];
369 // Use ToDictionary here because we can push nullptr into the ParamList. 369 // Use ToDictionary here because we can push nullptr into the ParamList.
370 CPDF_Dictionary* pParam = ToDictionary(ParamList[i]); 370 CPDF_Dictionary* pParam = ToDictionary(ParamList[i]);
371 uint8_t* new_buf = nullptr; 371 uint8_t* new_buf = nullptr;
372 FX_DWORD new_size = (FX_DWORD)-1; 372 uint32_t new_size = (uint32_t)-1;
373 int offset = -1; 373 int offset = -1;
374 if (decoder == "FlateDecode" || decoder == "Fl") { 374 if (decoder == "FlateDecode" || decoder == "Fl") {
375 if (bImageAcc && i == nSize - 1) { 375 if (bImageAcc && i == nSize - 1) {
376 ImageEncoding = "FlateDecode"; 376 ImageEncoding = "FlateDecode";
377 dest_buf = (uint8_t*)last_buf; 377 dest_buf = (uint8_t*)last_buf;
378 dest_size = last_size; 378 dest_size = last_size;
379 pImageParms = pParam; 379 pImageParms = pParam;
380 return TRUE; 380 return TRUE;
381 } 381 }
382 offset = FPDFAPI_FlateOrLZWDecode(FALSE, last_buf, last_size, pParam, 382 offset = FPDFAPI_FlateOrLZWDecode(FALSE, last_buf, last_size, pParam,
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 last_buf = new_buf; 424 last_buf = new_buf;
425 last_size = new_size; 425 last_size = new_size;
426 } 426 }
427 ImageEncoding = ""; 427 ImageEncoding = "";
428 pImageParms = nullptr; 428 pImageParms = nullptr;
429 dest_buf = last_buf; 429 dest_buf = last_buf;
430 dest_size = last_size; 430 dest_size = last_size;
431 return TRUE; 431 return TRUE;
432 } 432 }
433 433
434 CFX_WideString PDF_DecodeText(const uint8_t* src_data, FX_DWORD src_len) { 434 CFX_WideString PDF_DecodeText(const uint8_t* src_data, uint32_t src_len) {
435 CFX_WideString result; 435 CFX_WideString result;
436 if (src_len >= 2 && ((src_data[0] == 0xfe && src_data[1] == 0xff) || 436 if (src_len >= 2 && ((src_data[0] == 0xfe && src_data[1] == 0xff) ||
437 (src_data[0] == 0xff && src_data[1] == 0xfe))) { 437 (src_data[0] == 0xff && src_data[1] == 0xfe))) {
438 bool bBE = src_data[0] == 0xfe; 438 bool bBE = src_data[0] == 0xfe;
439 FX_DWORD max_chars = (src_len - 2) / 2; 439 uint32_t max_chars = (src_len - 2) / 2;
440 if (!max_chars) { 440 if (!max_chars) {
441 return result; 441 return result;
442 } 442 }
443 if (src_data[0] == 0xff) { 443 if (src_data[0] == 0xff) {
444 bBE = !src_data[2]; 444 bBE = !src_data[2];
445 } 445 }
446 FX_WCHAR* dest_buf = result.GetBuffer(max_chars); 446 FX_WCHAR* dest_buf = result.GetBuffer(max_chars);
447 const uint8_t* uni_str = src_data + 2; 447 const uint8_t* uni_str = src_data + 2;
448 int dest_pos = 0; 448 int dest_pos = 0;
449 for (FX_DWORD i = 0; i < max_chars * 2; i += 2) { 449 for (uint32_t i = 0; i < max_chars * 2; i += 2) {
450 uint16_t unicode = bBE ? (uni_str[i] << 8 | uni_str[i + 1]) 450 uint16_t unicode = bBE ? (uni_str[i] << 8 | uni_str[i + 1])
451 : (uni_str[i + 1] << 8 | uni_str[i]); 451 : (uni_str[i + 1] << 8 | uni_str[i]);
452 if (unicode == 0x1b) { 452 if (unicode == 0x1b) {
453 i += 2; 453 i += 2;
454 while (i < max_chars * 2) { 454 while (i < max_chars * 2) {
455 uint16_t unicode = bBE ? (uni_str[i] << 8 | uni_str[i + 1]) 455 uint16_t unicode = bBE ? (uni_str[i] << 8 | uni_str[i + 1])
456 : (uni_str[i + 1] << 8 | uni_str[i]); 456 : (uni_str[i + 1] << 8 | uni_str[i]);
457 i += 2; 457 i += 2;
458 if (unicode == 0x1b) { 458 if (unicode == 0x1b) {
459 break; 459 break;
460 } 460 }
461 } 461 }
462 } else { 462 } else {
463 dest_buf[dest_pos++] = unicode; 463 dest_buf[dest_pos++] = unicode;
464 } 464 }
465 } 465 }
466 result.ReleaseBuffer(dest_pos); 466 result.ReleaseBuffer(dest_pos);
467 } else { 467 } else {
468 FX_WCHAR* dest_buf = result.GetBuffer(src_len); 468 FX_WCHAR* dest_buf = result.GetBuffer(src_len);
469 for (FX_DWORD i = 0; i < src_len; i++) 469 for (uint32_t i = 0; i < src_len; i++)
470 dest_buf[i] = PDFDocEncoding[src_data[i]]; 470 dest_buf[i] = PDFDocEncoding[src_data[i]];
471 result.ReleaseBuffer(src_len); 471 result.ReleaseBuffer(src_len);
472 } 472 }
473 return result; 473 return result;
474 } 474 }
475 475
476 CFX_WideString PDF_DecodeText(const CFX_ByteString& bstr) { 476 CFX_WideString PDF_DecodeText(const CFX_ByteString& bstr) {
477 return PDF_DecodeText((const uint8_t*)bstr.c_str(), bstr.GetLength()); 477 return PDF_DecodeText((const uint8_t*)bstr.c_str(), bstr.GetLength());
478 } 478 }
479 479
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
547 result << "\\r"; 547 result << "\\r";
548 continue; 548 continue;
549 } 549 }
550 result.AppendChar(ch); 550 result.AppendChar(ch);
551 } 551 }
552 result.AppendChar(')'); 552 result.AppendChar(')');
553 return result.GetByteString(); 553 return result.GetByteString();
554 } 554 }
555 555
556 void FlateEncode(const uint8_t* src_buf, 556 void FlateEncode(const uint8_t* src_buf,
557 FX_DWORD src_size, 557 uint32_t src_size,
558 uint8_t*& dest_buf, 558 uint8_t*& dest_buf,
559 FX_DWORD& dest_size) { 559 uint32_t& dest_size) {
560 CCodec_ModuleMgr* pEncoders = CPDF_ModuleMgr::Get()->GetCodecModule(); 560 CCodec_ModuleMgr* pEncoders = CPDF_ModuleMgr::Get()->GetCodecModule();
561 if (pEncoders) { 561 if (pEncoders) {
562 pEncoders->GetFlateModule()->Encode(src_buf, src_size, dest_buf, dest_size); 562 pEncoders->GetFlateModule()->Encode(src_buf, src_size, dest_buf, dest_size);
563 } 563 }
564 } 564 }
565 565
566 void FlateEncode(const uint8_t* src_buf, 566 void FlateEncode(const uint8_t* src_buf,
567 FX_DWORD src_size, 567 uint32_t src_size,
568 int predictor, 568 int predictor,
569 int Colors, 569 int Colors,
570 int BitsPerComponent, 570 int BitsPerComponent,
571 int Columns, 571 int Columns,
572 uint8_t*& dest_buf, 572 uint8_t*& dest_buf,
573 FX_DWORD& dest_size) { 573 uint32_t& dest_size) {
574 CCodec_ModuleMgr* pEncoders = CPDF_ModuleMgr::Get()->GetCodecModule(); 574 CCodec_ModuleMgr* pEncoders = CPDF_ModuleMgr::Get()->GetCodecModule();
575 if (pEncoders) { 575 if (pEncoders) {
576 pEncoders->GetFlateModule()->Encode(src_buf, src_size, predictor, Colors, 576 pEncoders->GetFlateModule()->Encode(src_buf, src_size, predictor, Colors,
577 BitsPerComponent, Columns, dest_buf, 577 BitsPerComponent, Columns, dest_buf,
578 dest_size); 578 dest_size);
579 } 579 }
580 } 580 }
581 581
582 FX_DWORD FlateDecode(const uint8_t* src_buf, 582 uint32_t FlateDecode(const uint8_t* src_buf,
583 FX_DWORD src_size, 583 uint32_t src_size,
584 uint8_t*& dest_buf, 584 uint8_t*& dest_buf,
585 FX_DWORD& dest_size) { 585 uint32_t& dest_size) {
586 CCodec_ModuleMgr* pEncoders = CPDF_ModuleMgr::Get()->GetCodecModule(); 586 CCodec_ModuleMgr* pEncoders = CPDF_ModuleMgr::Get()->GetCodecModule();
587 if (pEncoders) { 587 if (pEncoders) {
588 return pEncoders->GetFlateModule()->FlateOrLZWDecode( 588 return pEncoders->GetFlateModule()->FlateOrLZWDecode(
589 FALSE, src_buf, src_size, FALSE, 0, 0, 0, 0, 0, dest_buf, dest_size); 589 FALSE, src_buf, src_size, FALSE, 0, 0, 0, 0, 0, dest_buf, dest_size);
590 } 590 }
591 return 0; 591 return 0;
592 } 592 }
OLDNEW
« no previous file with comments | « core/fpdfapi/fpdf_parser/cpdf_syntax_parser.cpp ('k') | core/fpdfapi/fpdf_parser/fpdf_parser_decode_unittest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698