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

Side by Side Diff: third_party/libpng/pngerror.c

Issue 1118002: libpng: update to 1.2.43 (Closed)
Patch Set: Created 10 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 1
2 /* pngerror.c - stub functions for i/o and memory allocation 2 /* pngerror.c - stub functions for i/o and memory allocation
3 * 3 *
4 * Last changed in libpng 1.2.37 [June 4, 2009] 4 * Last changed in libpng 1.2.41 [December 3, 2009]
5 * For conditions of distribution and use, see copyright notice in png.h
6 * Copyright (c) 1998-2009 Glenn Randers-Pehrson 5 * Copyright (c) 1998-2009 Glenn Randers-Pehrson
7 * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) 6 * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
8 * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) 7 * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
9 * 8 *
9 * This code is released under the libpng license.
10 * For conditions of distribution and use, see the disclaimer
11 * and license in png.h
12 *
10 * This file provides a location for all error handling. Users who 13 * This file provides a location for all error handling. Users who
11 * need special error handling are expected to write replacement functions 14 * need special error handling are expected to write replacement functions
12 * and use png_set_error_fn() to use those functions. See the instructions 15 * and use png_set_error_fn() to use those functions. See the instructions
13 * at each function. 16 * at each function.
14 */ 17 */
15 18
16 #define PNG_INTERNAL 19 #define PNG_INTERNAL
20 #define PNG_NO_PEDANTIC_WARNINGS
17 #include "png.h" 21 #include "png.h"
18 #if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED) 22 #if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
19 23
20 static void /* PRIVATE */ 24 static void /* PRIVATE */
21 png_default_error PNGARG((png_structp png_ptr, 25 png_default_error PNGARG((png_structp png_ptr,
22 png_const_charp error_message)); 26 png_const_charp error_message)) PNG_NORETURN;
23 #ifndef PNG_NO_WARNINGS 27 #ifdef PNG_WARNINGS_SUPPORTED
24 static void /* PRIVATE */ 28 static void /* PRIVATE */
25 png_default_warning PNGARG((png_structp png_ptr, 29 png_default_warning PNGARG((png_structp png_ptr,
26 png_const_charp warning_message)); 30 png_const_charp warning_message));
27 #endif /* PNG_NO_WARNINGS */ 31 #endif /* PNG_WARNINGS_SUPPORTED */
28 32
29 /* This function is called whenever there is a fatal error. This function 33 /* This function is called whenever there is a fatal error. This function
30 * should not be changed. If there is a need to handle errors differently, 34 * should not be changed. If there is a need to handle errors differently,
31 * you should supply a replacement error function and use png_set_error_fn() 35 * you should supply a replacement error function and use png_set_error_fn()
32 * to replace the error function at run-time. 36 * to replace the error function at run-time.
33 */ 37 */
34 #ifndef PNG_NO_ERROR_TEXT 38 #ifdef PNG_ERROR_TEXT_SUPPORTED
35 void PNGAPI 39 void PNGAPI
36 png_error(png_structp png_ptr, png_const_charp error_message) 40 png_error(png_structp png_ptr, png_const_charp error_message)
37 { 41 {
38 #ifdef PNG_ERROR_NUMBERS_SUPPORTED 42 #ifdef PNG_ERROR_NUMBERS_SUPPORTED
39 char msg[16]; 43 char msg[16];
40 if (png_ptr != NULL) 44 if (png_ptr != NULL)
41 { 45 {
42 if (png_ptr->flags& 46 if (png_ptr->flags&
43 (PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT)) 47 (PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT))
44 { 48 {
45 if (*error_message == '#') 49 if (*error_message == PNG_LITERAL_SHARP)
46 { 50 {
47 /* Strip "#nnnn " from beginning of error message. */ 51 /* Strip "#nnnn " from beginning of error message. */
48 int offset; 52 int offset;
49 for (offset = 1; offset<15; offset++) 53 for (offset = 1; offset<15; offset++)
50 if (error_message[offset] == ' ') 54 if (error_message[offset] == ' ')
51 break; 55 break;
52 if (png_ptr->flags&PNG_FLAG_STRIP_ERROR_TEXT) 56 if (png_ptr->flags&PNG_FLAG_STRIP_ERROR_TEXT)
53 { 57 {
54 int i; 58 int i;
55 for (i = 0; i < offset - 1; i++) 59 for (i = 0; i < offset - 1; i++)
(...skipping 27 matching lines...) Expand all
83 void PNGAPI 87 void PNGAPI
84 png_err(png_structp png_ptr) 88 png_err(png_structp png_ptr)
85 { 89 {
86 if (png_ptr != NULL && png_ptr->error_fn != NULL) 90 if (png_ptr != NULL && png_ptr->error_fn != NULL)
87 (*(png_ptr->error_fn))(png_ptr, '\0'); 91 (*(png_ptr->error_fn))(png_ptr, '\0');
88 92
89 /* If the custom handler doesn't exist, or if it returns, 93 /* If the custom handler doesn't exist, or if it returns,
90 use the default handler, which will not return. */ 94 use the default handler, which will not return. */
91 png_default_error(png_ptr, '\0'); 95 png_default_error(png_ptr, '\0');
92 } 96 }
93 #endif /* PNG_NO_ERROR_TEXT */ 97 #endif /* PNG_ERROR_TEXT_SUPPORTED */
94 98
95 #ifndef PNG_NO_WARNINGS 99 #ifdef PNG_WARNINGS_SUPPORTED
96 /* This function is called whenever there is a non-fatal error. This function 100 /* This function is called whenever there is a non-fatal error. This function
97 * should not be changed. If there is a need to handle warnings differently, 101 * should not be changed. If there is a need to handle warnings differently,
98 * you should supply a replacement warning function and use 102 * you should supply a replacement warning function and use
99 * png_set_error_fn() to replace the warning function at run-time. 103 * png_set_error_fn() to replace the warning function at run-time.
100 */ 104 */
101 void PNGAPI 105 void PNGAPI
102 png_warning(png_structp png_ptr, png_const_charp warning_message) 106 png_warning(png_structp png_ptr, png_const_charp warning_message)
103 { 107 {
104 int offset = 0; 108 int offset = 0;
105 if (png_ptr != NULL) 109 if (png_ptr != NULL)
106 { 110 {
107 #ifdef PNG_ERROR_NUMBERS_SUPPORTED 111 #ifdef PNG_ERROR_NUMBERS_SUPPORTED
108 if (png_ptr->flags& 112 if (png_ptr->flags&
109 (PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT)) 113 (PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT))
110 #endif 114 #endif
111 { 115 {
112 if (*warning_message == '#') 116 if (*warning_message == PNG_LITERAL_SHARP)
113 { 117 {
114 for (offset = 1; offset < 15; offset++) 118 for (offset = 1; offset < 15; offset++)
115 if (warning_message[offset] == ' ') 119 if (warning_message[offset] == ' ')
116 break; 120 break;
117 } 121 }
118 } 122 }
119 } 123 }
120 if (png_ptr != NULL && png_ptr->warning_fn != NULL) 124 if (png_ptr != NULL && png_ptr->warning_fn != NULL)
121 (*(png_ptr->warning_fn))(png_ptr, warning_message + offset); 125 (*(png_ptr->warning_fn))(png_ptr, warning_message + offset);
122 else 126 else
123 png_default_warning(png_ptr, warning_message + offset); 127 png_default_warning(png_ptr, warning_message + offset);
124 } 128 }
125 #endif /* PNG_NO_WARNINGS */ 129 #endif /* PNG_WARNINGS_SUPPORTED */
126 130
131 #ifdef PNG_BENIGN_ERRORS_SUPPORTED
132 void PNGAPI
133 png_benign_error(png_structp png_ptr, png_const_charp error_message)
134 {
135 if (png_ptr->flags & PNG_FLAG_BENIGN_ERRORS_WARN)
136 png_warning(png_ptr, error_message);
137 else
138 png_error(png_ptr, error_message);
139 }
140 #endif
127 141
128 /* These utilities are used internally to build an error message that relates 142 /* These utilities are used internally to build an error message that relates
129 * to the current chunk. The chunk name comes from png_ptr->chunk_name, 143 * to the current chunk. The chunk name comes from png_ptr->chunk_name,
130 * this is used to prefix the message. The message is limited in length 144 * this is used to prefix the message. The message is limited in length
131 * to 63 bytes, the name characters are output as hex digits wrapped in [] 145 * to 63 bytes, the name characters are output as hex digits wrapped in []
132 * if the character is invalid. 146 * if the character is invalid.
133 */ 147 */
134 #define isnonalpha(c) ((c) < 65 || (c) > 122 || ((c) > 90 && (c) < 97)) 148 #define isnonalpha(c) ((c) < 65 || (c) > 122 || ((c) > 90 && (c) < 97))
135 static PNG_CONST char png_digit[16] = { 149 static PNG_CONST char png_digit[16] = {
136 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 150 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
137 'A', 'B', 'C', 'D', 'E', 'F' 151 'A', 'B', 'C', 'D', 'E', 'F'
138 }; 152 };
139 153
140 #define PNG_MAX_ERROR_TEXT 64 154 #define PNG_MAX_ERROR_TEXT 64
141 155 #if defined(PNG_WARNINGS_SUPPORTED) || defined(PNG_ERROR_TEXT_SUPPORTED)
142 #if !defined(PNG_NO_WARNINGS) || !defined(PNG_NO_ERROR_TEXT)
143 static void /* PRIVATE */ 156 static void /* PRIVATE */
144 png_format_buffer(png_structp png_ptr, png_charp buffer, png_const_charp 157 png_format_buffer(png_structp png_ptr, png_charp buffer, png_const_charp
145 error_message) 158 error_message)
146 { 159 {
147 int iout = 0, iin = 0; 160 int iout = 0, iin = 0;
148 161
149 while (iin < 4) 162 while (iin < 4)
150 { 163 {
151 int c = png_ptr->chunk_name[iin++]; 164 int c = png_ptr->chunk_name[iin++];
152 if (isnonalpha(c)) 165 if (isnonalpha(c))
153 { 166 {
154 buffer[iout++] = '['; 167 buffer[iout++] = PNG_LITERAL_LEFT_SQUARE_BRACKET;
155 buffer[iout++] = png_digit[(c & 0xf0) >> 4]; 168 buffer[iout++] = png_digit[(c & 0xf0) >> 4];
156 buffer[iout++] = png_digit[c & 0x0f]; 169 buffer[iout++] = png_digit[c & 0x0f];
157 buffer[iout++] = ']'; 170 buffer[iout++] = PNG_LITERAL_RIGHT_SQUARE_BRACKET;
158 } 171 }
159 else 172 else
160 { 173 {
161 buffer[iout++] = (png_byte)c; 174 buffer[iout++] = (png_byte)c;
162 } 175 }
163 } 176 }
164 177
165 if (error_message == NULL) 178 if (error_message == NULL)
166 buffer[iout] = '\0'; 179 buffer[iout] = '\0';
167 else 180 else
(...skipping 12 matching lines...) Expand all
180 char msg[18+PNG_MAX_ERROR_TEXT]; 193 char msg[18+PNG_MAX_ERROR_TEXT];
181 if (png_ptr == NULL) 194 if (png_ptr == NULL)
182 png_error(png_ptr, error_message); 195 png_error(png_ptr, error_message);
183 else 196 else
184 { 197 {
185 png_format_buffer(png_ptr, msg, error_message); 198 png_format_buffer(png_ptr, msg, error_message);
186 png_error(png_ptr, msg); 199 png_error(png_ptr, msg);
187 } 200 }
188 } 201 }
189 #endif /* PNG_READ_SUPPORTED */ 202 #endif /* PNG_READ_SUPPORTED */
190 #endif /* !defined(PNG_NO_WARNINGS) || !defined(PNG_NO_ERROR_TEXT) */ 203 #endif /* PNG_WARNINGS_SUPPORTED || PNG_ERROR_TEXT_SUPPORTED */
191 204
192 #ifndef PNG_NO_WARNINGS 205 #ifdef PNG_WARNINGS_SUPPORTED
193 void PNGAPI 206 void PNGAPI
194 png_chunk_warning(png_structp png_ptr, png_const_charp warning_message) 207 png_chunk_warning(png_structp png_ptr, png_const_charp warning_message)
195 { 208 {
196 char msg[18+PNG_MAX_ERROR_TEXT]; 209 char msg[18+PNG_MAX_ERROR_TEXT];
197 if (png_ptr == NULL) 210 if (png_ptr == NULL)
198 png_warning(png_ptr, warning_message); 211 png_warning(png_ptr, warning_message);
199 else 212 else
200 { 213 {
201 png_format_buffer(png_ptr, msg, warning_message); 214 png_format_buffer(png_ptr, msg, warning_message);
202 png_warning(png_ptr, msg); 215 png_warning(png_ptr, msg);
203 } 216 }
204 } 217 }
205 #endif /* PNG_NO_WARNINGS */ 218 #endif /* PNG_WARNINGS_SUPPORTED */
206 219
220 #ifdef PNG_READ_SUPPORTED
221 #ifdef PNG_BENIGN_ERRORS_SUPPORTED
222 void PNGAPI
223 png_chunk_benign_error(png_structp png_ptr, png_const_charp error_message)
224 {
225 if (png_ptr->flags & PNG_FLAG_BENIGN_ERRORS_WARN)
226 png_chunk_warning(png_ptr, error_message);
227 else
228 png_chunk_error(png_ptr, error_message);
229 }
230 #endif
231 #endif /* PNG_READ_SUPPORTED */
207 232
208 /* This is the default error handling function. Note that replacements for 233 /* This is the default error handling function. Note that replacements for
209 * this function MUST NOT RETURN, or the program will likely crash. This 234 * this function MUST NOT RETURN, or the program will likely crash. This
210 * function is used by default, or if the program supplies NULL for the 235 * function is used by default, or if the program supplies NULL for the
211 * error function pointer in png_set_error_fn(). 236 * error function pointer in png_set_error_fn().
212 */ 237 */
213 static void /* PRIVATE */ 238 static void /* PRIVATE */
214 png_default_error(png_structp png_ptr, png_const_charp error_message) 239 png_default_error(png_structp png_ptr, png_const_charp error_message)
215 { 240 {
216 #ifndef PNG_NO_CONSOLE_IO 241 #ifdef PNG_CONSOLE_IO_SUPPORTED
217 #ifdef PNG_ERROR_NUMBERS_SUPPORTED 242 #ifdef PNG_ERROR_NUMBERS_SUPPORTED
218 if (*error_message == '#') 243 if (*error_message == PNG_LITERAL_SHARP)
219 { 244 {
220 /* Strip "#nnnn " from beginning of error message. */ 245 /* Strip "#nnnn " from beginning of error message. */
221 int offset; 246 int offset;
222 char error_number[16]; 247 char error_number[16];
223 for (offset = 0; offset<15; offset++) 248 for (offset = 0; offset<15; offset++)
224 { 249 {
225 error_number[offset] = error_message[offset + 1]; 250 error_number[offset] = error_message[offset + 1];
226 if (error_message[offset] == ' ') 251 if (error_message[offset] == ' ')
227 break; 252 break;
228 } 253 }
(...skipping 19 matching lines...) Expand all
248 } 273 }
249 #endif 274 #endif
250 275
251 #ifdef PNG_SETJMP_SUPPORTED 276 #ifdef PNG_SETJMP_SUPPORTED
252 if (png_ptr) 277 if (png_ptr)
253 { 278 {
254 # ifdef USE_FAR_KEYWORD 279 # ifdef USE_FAR_KEYWORD
255 { 280 {
256 jmp_buf jmpbuf; 281 jmp_buf jmpbuf;
257 png_memcpy(jmpbuf, png_ptr->jmpbuf, png_sizeof(jmp_buf)); 282 png_memcpy(jmpbuf, png_ptr->jmpbuf, png_sizeof(jmp_buf));
258 longjmp(jmpbuf, 1); 283 longjmp(jmpbuf,1);
259 } 284 }
260 # else 285 # else
261 longjmp(png_ptr->jmpbuf, 1); 286 longjmp(png_ptr->jmpbuf, 1);
262 # endif 287 # endif
263 } 288 }
264 #else 289 #endif
290 /* Here if not setjmp support or if png_ptr is null. */
265 PNG_ABORT(); 291 PNG_ABORT();
266 #endif 292 #ifndef PNG_CONSOLE_IO_SUPPORTED
267 #ifdef PNG_NO_CONSOLE_IO
268 error_message = error_message; /* Make compiler happy */ 293 error_message = error_message; /* Make compiler happy */
269 #endif 294 #endif
270 } 295 }
271 296
272 #ifndef PNG_NO_WARNINGS 297 #ifdef PNG_WARNINGS_SUPPORTED
273 /* This function is called when there is a warning, but the library thinks 298 /* This function is called when there is a warning, but the library thinks
274 * it can continue anyway. Replacement functions don't have to do anything 299 * it can continue anyway. Replacement functions don't have to do anything
275 * here if you don't want them to. In the default configuration, png_ptr is 300 * here if you don't want them to. In the default configuration, png_ptr is
276 * not used, but it is passed in case it may be useful. 301 * not used, but it is passed in case it may be useful.
277 */ 302 */
278 static void /* PRIVATE */ 303 static void /* PRIVATE */
279 png_default_warning(png_structp png_ptr, png_const_charp warning_message) 304 png_default_warning(png_structp png_ptr, png_const_charp warning_message)
280 { 305 {
281 #ifndef PNG_NO_CONSOLE_IO 306 #ifdef PNG_CONSOLE_IO_SUPPORTED
282 # ifdef PNG_ERROR_NUMBERS_SUPPORTED 307 # ifdef PNG_ERROR_NUMBERS_SUPPORTED
283 if (*warning_message == '#') 308 if (*warning_message == PNG_LITERAL_SHARP)
284 { 309 {
285 int offset; 310 int offset;
286 char warning_number[16]; 311 char warning_number[16];
287 for (offset = 0; offset < 15; offset++) 312 for (offset = 0; offset < 15; offset++)
288 { 313 {
289 warning_number[offset] = warning_message[offset + 1]; 314 warning_number[offset] = warning_message[offset + 1];
290 if (warning_message[offset] == ' ') 315 if (warning_message[offset] == ' ')
291 break; 316 break;
292 } 317 }
293 if ((offset > 1) && (offset < 15)) 318 if ((offset > 1) && (offset < 15))
(...skipping 14 matching lines...) Expand all
308 # endif 333 # endif
309 { 334 {
310 fprintf(stderr, "libpng warning: %s", warning_message); 335 fprintf(stderr, "libpng warning: %s", warning_message);
311 fprintf(stderr, PNG_STRING_NEWLINE); 336 fprintf(stderr, PNG_STRING_NEWLINE);
312 } 337 }
313 #else 338 #else
314 warning_message = warning_message; /* Make compiler happy */ 339 warning_message = warning_message; /* Make compiler happy */
315 #endif 340 #endif
316 png_ptr = png_ptr; /* Make compiler happy */ 341 png_ptr = png_ptr; /* Make compiler happy */
317 } 342 }
318 #endif /* PNG_NO_WARNINGS */ 343 #endif /* PNG_WARNINGS_SUPPORTED */
319 344
320 /* This function is called when the application wants to use another method 345 /* This function is called when the application wants to use another method
321 * of handling errors and warnings. Note that the error function MUST NOT 346 * of handling errors and warnings. Note that the error function MUST NOT
322 * return to the calling routine or serious problems will occur. The return 347 * return to the calling routine or serious problems will occur. The return
323 * method used in the default routine calls longjmp(png_ptr->jmpbuf, 1) 348 * method used in the default routine calls longjmp(png_ptr->jmpbuf, 1)
324 */ 349 */
325 void PNGAPI 350 void PNGAPI
326 png_set_error_fn(png_structp png_ptr, png_voidp error_ptr, 351 png_set_error_fn(png_structp png_ptr, png_voidp error_ptr,
327 png_error_ptr error_fn, png_error_ptr warning_fn) 352 png_error_ptr error_fn, png_error_ptr warning_fn)
328 { 353 {
(...skipping 23 matching lines...) Expand all
352 png_set_strip_error_numbers(png_structp png_ptr, png_uint_32 strip_mode) 377 png_set_strip_error_numbers(png_structp png_ptr, png_uint_32 strip_mode)
353 { 378 {
354 if (png_ptr != NULL) 379 if (png_ptr != NULL)
355 { 380 {
356 png_ptr->flags &= 381 png_ptr->flags &=
357 ((~(PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT))&strip_mode); 382 ((~(PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT))&strip_mode);
358 } 383 }
359 } 384 }
360 #endif 385 #endif
361 #endif /* PNG_READ_SUPPORTED || PNG_WRITE_SUPPORTED */ 386 #endif /* PNG_READ_SUPPORTED || PNG_WRITE_SUPPORTED */
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698