256
264
} while (png_libpng_ver[i++]);
258
png_debug(1, "in png_read_init_3\n");
266
png_debug(1, "in png_read_init_3");
260
268
#ifdef PNG_SETJMP_SUPPORTED
261
269
/* save jump buffer and error functions */
262
png_memcpy(tmp_jmp, png_ptr->jmpbuf, png_sizeof (jmp_buf));
270
png_memcpy(tmp_jmp, png_ptr->jmpbuf, png_sizeof(jmp_buf));
265
if(png_sizeof(png_struct) > png_struct_size)
267
png_destroy_struct(png_ptr);
268
*ptr_ptr = (png_structp)png_create_struct(PNG_STRUCT_PNG);
273
if (png_sizeof(png_struct) > png_struct_size)
275
png_destroy_struct(png_ptr);
276
*ptr_ptr = (png_structp)png_create_struct(PNG_STRUCT_PNG);
272
280
/* reset all variables to 0 */
273
png_memset(png_ptr, 0, png_sizeof (png_struct));
281
png_memset(png_ptr, 0, png_sizeof(png_struct));
275
283
#ifdef PNG_SETJMP_SUPPORTED
276
284
/* restore jump buffer */
277
png_memcpy(png_ptr->jmpbuf, tmp_jmp, png_sizeof (jmp_buf));
285
png_memcpy(png_ptr->jmpbuf, tmp_jmp, png_sizeof(jmp_buf));
280
288
/* added at libpng-1.2.6 */
405
413
PNG_CONST PNG_fdAT;
407
415
#endif /* PNG_USE_LOCAL_ARRAYS */
408
png_byte chunk_length[4];
411
png_read_data(png_ptr, chunk_length, 4);
412
length = png_get_uint_31(png_ptr,chunk_length);
414
png_reset_crc(png_ptr);
415
png_crc_read(png_ptr, png_ptr->chunk_name, 4);
417
png_debug2(0, "Reading %s chunk, length=%lu.\n", png_ptr->chunk_name,
416
png_uint_32 length = png_read_chunk_header(png_ptr);
417
PNG_CONST png_bytep chunk_name = png_ptr->chunk_name;
420
419
/* This should be a binary subdivision search or a hash for
421
420
* matching the chunk name rather than a linear search.
423
if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
424
if(png_ptr->mode & PNG_AFTER_IDAT)
422
if (!png_memcmp(chunk_name, png_IDAT, 4))
423
if (png_ptr->mode & PNG_AFTER_IDAT)
425
424
png_ptr->mode |= PNG_HAVE_CHUNK_AFTER_IDAT;
427
if (!png_memcmp(png_ptr->chunk_name, png_IHDR, 4))
426
if (!png_memcmp(chunk_name, png_IHDR, 4))
428
427
png_handle_IHDR(png_ptr, info_ptr, length);
429
else if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4))
428
else if (!png_memcmp(chunk_name, png_IEND, 4))
430
429
png_handle_IEND(png_ptr, info_ptr, length);
431
430
#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
432
else if (png_handle_as_unknown(png_ptr, png_ptr->chunk_name))
431
else if (png_handle_as_unknown(png_ptr, chunk_name))
434
if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
433
if (!png_memcmp(chunk_name, png_IDAT, 4))
435
434
png_ptr->mode |= PNG_HAVE_IDAT;
436
435
png_handle_unknown(png_ptr, info_ptr, length);
437
if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4))
436
if (!png_memcmp(chunk_name, png_PLTE, 4))
438
437
png_ptr->mode |= PNG_HAVE_PLTE;
439
else if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
438
else if (!png_memcmp(chunk_name, png_IDAT, 4))
441
440
if (!(png_ptr->mode & PNG_HAVE_IHDR))
442
441
png_error(png_ptr, "Missing IHDR before IDAT");
467
465
#if defined(PNG_READ_bKGD_SUPPORTED)
468
else if (!png_memcmp(png_ptr->chunk_name, png_bKGD, 4))
466
else if (!png_memcmp(chunk_name, png_bKGD, 4))
469
467
png_handle_bKGD(png_ptr, info_ptr, length);
471
469
#if defined(PNG_READ_cHRM_SUPPORTED)
472
else if (!png_memcmp(png_ptr->chunk_name, png_cHRM, 4))
470
else if (!png_memcmp(chunk_name, png_cHRM, 4))
473
471
png_handle_cHRM(png_ptr, info_ptr, length);
475
473
#if defined(PNG_READ_gAMA_SUPPORTED)
476
else if (!png_memcmp(png_ptr->chunk_name, png_gAMA, 4))
474
else if (!png_memcmp(chunk_name, png_gAMA, 4))
477
475
png_handle_gAMA(png_ptr, info_ptr, length);
479
477
#if defined(PNG_READ_hIST_SUPPORTED)
480
else if (!png_memcmp(png_ptr->chunk_name, png_hIST, 4))
478
else if (!png_memcmp(chunk_name, png_hIST, 4))
481
479
png_handle_hIST(png_ptr, info_ptr, length);
483
481
#if defined(PNG_READ_oFFs_SUPPORTED)
484
else if (!png_memcmp(png_ptr->chunk_name, png_oFFs, 4))
482
else if (!png_memcmp(chunk_name, png_oFFs, 4))
485
483
png_handle_oFFs(png_ptr, info_ptr, length);
487
485
#if defined(PNG_READ_pCAL_SUPPORTED)
488
else if (!png_memcmp(png_ptr->chunk_name, png_pCAL, 4))
486
else if (!png_memcmp(chunk_name, png_pCAL, 4))
489
487
png_handle_pCAL(png_ptr, info_ptr, length);
491
489
#if defined(PNG_READ_sCAL_SUPPORTED)
492
else if (!png_memcmp(png_ptr->chunk_name, png_sCAL, 4))
490
else if (!png_memcmp(chunk_name, png_sCAL, 4))
493
491
png_handle_sCAL(png_ptr, info_ptr, length);
495
493
#if defined(PNG_READ_pHYs_SUPPORTED)
496
else if (!png_memcmp(png_ptr->chunk_name, png_pHYs, 4))
494
else if (!png_memcmp(chunk_name, png_pHYs, 4))
497
495
png_handle_pHYs(png_ptr, info_ptr, length);
499
497
#if defined(PNG_READ_sBIT_SUPPORTED)
500
else if (!png_memcmp(png_ptr->chunk_name, png_sBIT, 4))
498
else if (!png_memcmp(chunk_name, png_sBIT, 4))
501
499
png_handle_sBIT(png_ptr, info_ptr, length);
503
501
#if defined(PNG_READ_sRGB_SUPPORTED)
504
else if (!png_memcmp(png_ptr->chunk_name, png_sRGB, 4))
502
else if (!png_memcmp(chunk_name, png_sRGB, 4))
505
503
png_handle_sRGB(png_ptr, info_ptr, length);
507
505
#if defined(PNG_READ_iCCP_SUPPORTED)
508
else if (!png_memcmp(png_ptr->chunk_name, png_iCCP, 4))
506
else if (!png_memcmp(chunk_name, png_iCCP, 4))
509
507
png_handle_iCCP(png_ptr, info_ptr, length);
511
509
#if defined(PNG_READ_sPLT_SUPPORTED)
512
else if (!png_memcmp(png_ptr->chunk_name, png_sPLT, 4))
510
else if (!png_memcmp(chunk_name, png_sPLT, 4))
513
511
png_handle_sPLT(png_ptr, info_ptr, length);
515
513
#if defined(PNG_READ_tEXt_SUPPORTED)
516
else if (!png_memcmp(png_ptr->chunk_name, png_tEXt, 4))
514
else if (!png_memcmp(chunk_name, png_tEXt, 4))
517
515
png_handle_tEXt(png_ptr, info_ptr, length);
519
517
#if defined(PNG_READ_tIME_SUPPORTED)
520
else if (!png_memcmp(png_ptr->chunk_name, png_tIME, 4))
518
else if (!png_memcmp(chunk_name, png_tIME, 4))
521
519
png_handle_tIME(png_ptr, info_ptr, length);
523
521
#if defined(PNG_READ_tRNS_SUPPORTED)
524
else if (!png_memcmp(png_ptr->chunk_name, png_tRNS, 4))
522
else if (!png_memcmp(chunk_name, png_tRNS, 4))
525
523
png_handle_tRNS(png_ptr, info_ptr, length);
527
525
#if defined(PNG_READ_zTXt_SUPPORTED)
528
else if (!png_memcmp(png_ptr->chunk_name, png_zTXt, 4))
526
else if (!png_memcmp(chunk_name, png_zTXt, 4))
529
527
png_handle_zTXt(png_ptr, info_ptr, length);
531
529
#if defined(PNG_READ_iTXt_SUPPORTED)
532
else if (!png_memcmp(png_ptr->chunk_name, png_iTXt, 4))
530
else if (!png_memcmp(chunk_name, png_iTXt, 4))
533
531
png_handle_iTXt(png_ptr, info_ptr, length);
535
533
#if defined(PNG_READ_APNG_SUPPORTED)
536
else if (!png_memcmp(png_ptr->chunk_name, png_acTL, 4))
534
else if (!png_memcmp(chunk_name, png_acTL, 4))
537
535
png_handle_acTL(png_ptr, info_ptr, length);
538
else if (!png_memcmp(png_ptr->chunk_name, png_fcTL, 4))
536
else if (!png_memcmp(chunk_name, png_fcTL, 4))
539
537
png_handle_fcTL(png_ptr, info_ptr, length);
540
else if (!png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
538
else if (!png_memcmp(chunk_name, png_fdAT, 4))
541
539
png_handle_fdAT(png_ptr, info_ptr, length);
1112
1102
PNG_CONST PNG_fdAT;
1114
1104
#endif /* PNG_USE_LOCAL_ARRAYS */
1116
png_read_data(png_ptr, chunk_length, 4);
1117
length = png_get_uint_31(png_ptr,chunk_length);
1119
png_reset_crc(png_ptr);
1120
png_crc_read(png_ptr, png_ptr->chunk_name, 4);
1122
png_debug1(0, "Reading %s chunk.\n", png_ptr->chunk_name);
1124
if (!png_memcmp(png_ptr->chunk_name, png_IHDR, 4))
1105
png_uint_32 length = png_read_chunk_header(png_ptr);
1106
PNG_CONST png_bytep chunk_name = png_ptr->chunk_name;
1108
if (!png_memcmp(chunk_name, png_IHDR, 4))
1125
1109
png_handle_IHDR(png_ptr, info_ptr, length);
1126
else if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4))
1110
else if (!png_memcmp(chunk_name, png_IEND, 4))
1127
1111
png_handle_IEND(png_ptr, info_ptr, length);
1128
1112
#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
1129
else if (png_handle_as_unknown(png_ptr, png_ptr->chunk_name))
1113
else if (png_handle_as_unknown(png_ptr, chunk_name))
1131
if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
1115
if (!png_memcmp(chunk_name, png_IDAT, 4))
1133
1117
if ((length > 0) || (png_ptr->mode & PNG_HAVE_CHUNK_AFTER_IDAT))
1134
1118
png_error(png_ptr, "Too many IDAT's found");
1136
1120
png_handle_unknown(png_ptr, info_ptr, length);
1137
if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4))
1121
if (!png_memcmp(chunk_name, png_PLTE, 4))
1138
1122
png_ptr->mode |= PNG_HAVE_PLTE;
1141
else if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
1125
else if (!png_memcmp(chunk_name, png_IDAT, 4))
1143
1127
/* Zero length IDATs are legal after the last IDAT has been
1144
1128
* read, but not after other chunks have been read.
1147
1131
png_error(png_ptr, "Too many IDAT's found");
1148
1132
png_crc_finish(png_ptr, length);
1150
else if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4))
1134
else if (!png_memcmp(chunk_name, png_PLTE, 4))
1151
1135
png_handle_PLTE(png_ptr, info_ptr, length);
1152
1136
#if defined(PNG_READ_bKGD_SUPPORTED)
1153
else if (!png_memcmp(png_ptr->chunk_name, png_bKGD, 4))
1137
else if (!png_memcmp(chunk_name, png_bKGD, 4))
1154
1138
png_handle_bKGD(png_ptr, info_ptr, length);
1156
1140
#if defined(PNG_READ_cHRM_SUPPORTED)
1157
else if (!png_memcmp(png_ptr->chunk_name, png_cHRM, 4))
1141
else if (!png_memcmp(chunk_name, png_cHRM, 4))
1158
1142
png_handle_cHRM(png_ptr, info_ptr, length);
1160
1144
#if defined(PNG_READ_gAMA_SUPPORTED)
1161
else if (!png_memcmp(png_ptr->chunk_name, png_gAMA, 4))
1145
else if (!png_memcmp(chunk_name, png_gAMA, 4))
1162
1146
png_handle_gAMA(png_ptr, info_ptr, length);
1164
1148
#if defined(PNG_READ_hIST_SUPPORTED)
1165
else if (!png_memcmp(png_ptr->chunk_name, png_hIST, 4))
1149
else if (!png_memcmp(chunk_name, png_hIST, 4))
1166
1150
png_handle_hIST(png_ptr, info_ptr, length);
1168
1152
#if defined(PNG_READ_oFFs_SUPPORTED)
1169
else if (!png_memcmp(png_ptr->chunk_name, png_oFFs, 4))
1153
else if (!png_memcmp(chunk_name, png_oFFs, 4))
1170
1154
png_handle_oFFs(png_ptr, info_ptr, length);
1172
1156
#if defined(PNG_READ_pCAL_SUPPORTED)
1173
else if (!png_memcmp(png_ptr->chunk_name, png_pCAL, 4))
1157
else if (!png_memcmp(chunk_name, png_pCAL, 4))
1174
1158
png_handle_pCAL(png_ptr, info_ptr, length);
1176
1160
#if defined(PNG_READ_sCAL_SUPPORTED)
1177
else if (!png_memcmp(png_ptr->chunk_name, png_sCAL, 4))
1161
else if (!png_memcmp(chunk_name, png_sCAL, 4))
1178
1162
png_handle_sCAL(png_ptr, info_ptr, length);
1180
1164
#if defined(PNG_READ_pHYs_SUPPORTED)
1181
else if (!png_memcmp(png_ptr->chunk_name, png_pHYs, 4))
1165
else if (!png_memcmp(chunk_name, png_pHYs, 4))
1182
1166
png_handle_pHYs(png_ptr, info_ptr, length);
1184
1168
#if defined(PNG_READ_sBIT_SUPPORTED)
1185
else if (!png_memcmp(png_ptr->chunk_name, png_sBIT, 4))
1169
else if (!png_memcmp(chunk_name, png_sBIT, 4))
1186
1170
png_handle_sBIT(png_ptr, info_ptr, length);
1188
1172
#if defined(PNG_READ_sRGB_SUPPORTED)
1189
else if (!png_memcmp(png_ptr->chunk_name, png_sRGB, 4))
1173
else if (!png_memcmp(chunk_name, png_sRGB, 4))
1190
1174
png_handle_sRGB(png_ptr, info_ptr, length);
1192
1176
#if defined(PNG_READ_iCCP_SUPPORTED)
1193
else if (!png_memcmp(png_ptr->chunk_name, png_iCCP, 4))
1177
else if (!png_memcmp(chunk_name, png_iCCP, 4))
1194
1178
png_handle_iCCP(png_ptr, info_ptr, length);
1196
1180
#if defined(PNG_READ_sPLT_SUPPORTED)
1197
else if (!png_memcmp(png_ptr->chunk_name, png_sPLT, 4))
1181
else if (!png_memcmp(chunk_name, png_sPLT, 4))
1198
1182
png_handle_sPLT(png_ptr, info_ptr, length);
1200
1184
#if defined(PNG_READ_tEXt_SUPPORTED)
1201
else if (!png_memcmp(png_ptr->chunk_name, png_tEXt, 4))
1185
else if (!png_memcmp(chunk_name, png_tEXt, 4))
1202
1186
png_handle_tEXt(png_ptr, info_ptr, length);
1204
1188
#if defined(PNG_READ_tIME_SUPPORTED)
1205
else if (!png_memcmp(png_ptr->chunk_name, png_tIME, 4))
1189
else if (!png_memcmp(chunk_name, png_tIME, 4))
1206
1190
png_handle_tIME(png_ptr, info_ptr, length);
1208
1192
#if defined(PNG_READ_tRNS_SUPPORTED)
1209
else if (!png_memcmp(png_ptr->chunk_name, png_tRNS, 4))
1193
else if (!png_memcmp(chunk_name, png_tRNS, 4))
1210
1194
png_handle_tRNS(png_ptr, info_ptr, length);
1212
1196
#if defined(PNG_READ_zTXt_SUPPORTED)
1213
else if (!png_memcmp(png_ptr->chunk_name, png_zTXt, 4))
1197
else if (!png_memcmp(chunk_name, png_zTXt, 4))
1214
1198
png_handle_zTXt(png_ptr, info_ptr, length);
1216
1200
#if defined(PNG_READ_iTXt_SUPPORTED)
1217
else if (!png_memcmp(png_ptr->chunk_name, png_iTXt, 4))
1201
else if (!png_memcmp(chunk_name, png_iTXt, 4))
1218
1202
png_handle_iTXt(png_ptr, info_ptr, length);
1220
1204
#if defined(PNG_READ_APNG_SUPPORTED)