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

Side by Side Diff: experimental/PdfViewer/pdfparser/native/SkPdfNativeTokenizer.cpp

Issue 19625008: pdfviewer: more simple fixed to prevent crashes (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 years, 5 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 | Annotate | Revision Log
« no previous file with comments | « experimental/PdfViewer/pdfparser/native/SkNativeParsedPDF.cpp ('k') | 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 1
2 #include "SkPdfNativeTokenizer.h" 2 #include "SkPdfNativeTokenizer.h"
3 #include "SkPdfObject.h" 3 #include "SkPdfObject.h"
4 #include "SkPdfConfig.h" 4 #include "SkPdfConfig.h"
5 5
6 #include "SkPdfStreamCommonDictionary_autogen.h" 6 #include "SkPdfStreamCommonDictionary_autogen.h"
7 #include "SkPdfImageDictionary_autogen.h" 7 #include "SkPdfImageDictionary_autogen.h"
8 8
9 // TODO(edisonn): perf!!! 9 // TODO(edisonn): perf!!!
10 // there could be 0s between start and end! but not in the needle. 10 // there could be 0s between start and end! but not in the needle.
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 118
119 while (start < end && !isPdfWhiteSpaceOrPdfDelimiter(*start)) { 119 while (start < end && !isPdfWhiteSpaceOrPdfDelimiter(*start)) {
120 TRACE_TK(*start); 120 TRACE_TK(*start);
121 start++; 121 start++;
122 } 122 }
123 return start; 123 return start;
124 } 124 }
125 125
126 // last elem has to be ] 126 // last elem has to be ]
127 static const unsigned char* readArray(int level, const unsigned char* start, con st unsigned char* end, SkPdfObject* array, SkPdfAllocator* allocator, SkNativePa rsedPDF* doc) { 127 static const unsigned char* readArray(int level, const unsigned char* start, con st unsigned char* end, SkPdfObject* array, SkPdfAllocator* allocator, SkNativePa rsedPDF* doc) {
128 if (allocator == NULL) {
129 // TODO(edisonn): report/warning error
130 return end;
131 }
132
128 TRACE_INDENT(level, "Array"); 133 TRACE_INDENT(level, "Array");
129 while (start < end) { 134 while (start < end) {
130 // skip white spaces 135 // skip white spaces
131 start = skipPdfWhiteSpaces(level + 1, start, end); 136 start = skipPdfWhiteSpaces(level + 1, start, end);
132 137
133 const unsigned char* endOfToken = endOfPdfToken(level + 1, start, end); 138 const unsigned char* endOfToken = endOfPdfToken(level + 1, start, end);
134 139
135 if (endOfToken == start) { 140 if (endOfToken == start) {
136 // TODO(edisonn): report error in pdf file (end of stream with ] for end of aray 141 // TODO(edisonn): report error in pdf file (end of stream with ] for end of aray
137 return start; 142 return start;
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 break; 206 break;
202 207
203 case 'b': 208 case 'b':
204 // TODO(edisonn): any special meaning to backspace? 209 // TODO(edisonn): any special meaning to backspace?
205 if (hasOut) { *out = kBackspace_PdfSpecial; } 210 if (hasOut) { *out = kBackspace_PdfSpecial; }
206 out++; 211 out++;
207 in += 2; 212 in += 2;
208 break; 213 break;
209 214
210 case 'f': 215 case 'f':
211 *out = kFF_PdfWhiteSpace; 216 if (hasOut) { *out = kFF_PdfWhiteSpace; }
212 out++; 217 out++;
213 in += 2; 218 in += 2;
214 break; 219 break;
215 220
216 case kOpenedRoundBracket_PdfDelimiter: 221 case kOpenedRoundBracket_PdfDelimiter:
217 if (hasOut) { *out = kOpenedRoundBracket_PdfDelimiter; } 222 if (hasOut) { *out = kOpenedRoundBracket_PdfDelimiter; }
218 out++; 223 out++;
219 in += 2; 224 in += 2;
220 break; 225 break;
221 226
(...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after
686 inlineImage->addStream(start, (size_t)length); 691 inlineImage->addStream(start, (size_t)length);
687 } else { 692 } else {
688 // TODO(edisonn): report error in inline image stream (ID-EI) section 693 // TODO(edisonn): report error in inline image stream (ID-EI) section
689 // TODO(edisonn): based on filter, try to ignore a missing EI, and read data properly 694 // TODO(edisonn): based on filter, try to ignore a missing EI, and read data properly
690 return end; 695 return end;
691 } 696 }
692 return endEI; 697 return endEI;
693 } 698 }
694 699
695 static const unsigned char* readDictionary(int level, const unsigned char* start , const unsigned char* end, SkPdfObject* dict, SkPdfAllocator* allocator, SkNati veParsedPDF* doc) { 700 static const unsigned char* readDictionary(int level, const unsigned char* start , const unsigned char* end, SkPdfObject* dict, SkPdfAllocator* allocator, SkNati veParsedPDF* doc) {
701 if (allocator == NULL) {
702 // TODO(edisonn): report/warning error
703 return end;
704 }
696 TRACE_INDENT(level, "Dictionary"); 705 TRACE_INDENT(level, "Dictionary");
697 SkPdfObject::makeEmptyDictionary(dict); 706 SkPdfObject::makeEmptyDictionary(dict);
698 707
699 start = skipPdfWhiteSpaces(level, start, end); 708 start = skipPdfWhiteSpaces(level, start, end);
700 SkPdfAllocator tmpStorage; // keys will be stored in dict, we can free them immediately after set. 709 SkPdfAllocator tmpStorage; // keys will be stored in dict, we can free them immediately after set.
701 710
702 while (start < end && *start == kNamed_PdfDelimiter) { 711 while (start < end && *start == kNamed_PdfDelimiter) {
703 SkPdfObject key; 712 SkPdfObject key;
704 //*start = '\0'; 713 //*start = '\0';
705 start++; 714 start++;
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after
1059 SkPdfObject* obj = fAllocator->allocObject(); 1068 SkPdfObject* obj = fAllocator->allocObject();
1060 fUncompressedStream = nextObject(0, fUncompressedStream, fUncompress edStreamEnd, obj, fAllocator, fDoc); 1069 fUncompressedStream = nextObject(0, fUncompressedStream, fUncompress edStreamEnd, obj, fAllocator, fDoc);
1061 // TODO(edisonn): perf maybe we should not expand abreviation like t his 1070 // TODO(edisonn): perf maybe we should not expand abreviation like t his
1062 inlineImage->set(inlineImageKeyAbbreviationExpand(key), 1071 inlineImage->set(inlineImageKeyAbbreviationExpand(key),
1063 inlineImageValueAbbreviationExpand(obj)); 1072 inlineImageValueAbbreviationExpand(obj));
1064 } 1073 }
1065 } 1074 }
1066 // TODO(edisonn): report end of data with inline image without an EI 1075 // TODO(edisonn): report end of data with inline image without an EI
1067 return inlineImage; 1076 return inlineImage;
1068 } 1077 }
OLDNEW
« no previous file with comments | « experimental/PdfViewer/pdfparser/native/SkNativeParsedPDF.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698