@@ -1396,34 +1396,30 @@ static HashTable *exif_get_tag_ht(tag_info_type *tag_table)
1396
1396
1397
1397
/* {{{ exif_get_tagname
1398
1398
Get headername for tag_num or NULL if not defined */
1399
- static char * exif_get_tagname (int tag_num , char * ret , int len , tag_table_type tag_table )
1399
+ static char * exif_get_tagname (int tag_num , tag_table_type tag_table )
1400
+ {
1401
+ return zend_hash_index_find_ptr (exif_get_tag_ht (tag_table ), tag_num );
1402
+ }
1403
+ /* }}} */
1404
+
1405
+ static char * exif_get_tagname_debug (int tag_num , tag_table_type tag_table )
1400
1406
{
1401
- char tmp [32 ];
1402
1407
char * desc = zend_hash_index_find_ptr (exif_get_tag_ht (tag_table ), tag_num );
1403
1408
if (desc ) {
1404
- if (ret && len ) {
1405
- strlcpy (ret , desc , abs (len ));
1406
- if (len < 0 ) {
1407
- memset (ret + strlen (ret ), ' ' , - len - strlen (ret ) - 1 );
1408
- ret [- len - 1 ] = '\0' ;
1409
- }
1410
- return ret ;
1411
- }
1412
1409
return desc ;
1413
1410
}
1411
+ return "UndefinedTag" ;
1412
+ }
1414
1413
1415
- if (ret && len ) {
1416
- snprintf (tmp , sizeof (tmp ), "UndefinedTag:0x%04X" , tag_num );
1417
- strlcpy (ret , tmp , abs (len ));
1418
- if (len < 0 ) {
1419
- memset (ret + strlen (ret ), ' ' , - len - strlen (ret ) - 1 );
1420
- ret [- len - 1 ] = '\0' ;
1421
- }
1422
- return ret ;
1414
+ static char * exif_get_tagname_key (int tag_num , char * buf , size_t buf_size , tag_table_type tag_table )
1415
+ {
1416
+ char * desc = zend_hash_index_find_ptr (exif_get_tag_ht (tag_table ), tag_num );
1417
+ if (desc ) {
1418
+ return desc ;
1423
1419
}
1424
- return "" ;
1420
+ snprintf (buf , buf_size , "UndefinedTag:0x%04X" , tag_num );
1421
+ return buf ;
1425
1422
}
1426
- /* }}} */
1427
1423
1428
1424
/* {{{ exif_char_dump
1429
1425
* Do not use! This is a debug function... */
@@ -2416,7 +2412,7 @@ static void add_assoc_image_info(zval *value, int sub_array, image_info_type *im
2416
2412
name = uname ;
2417
2413
}
2418
2414
#ifdef EXIF_DEBUG
2419
- /* php_error_docref(NULL, E_NOTICE, "Adding infos: tag(0x%04X,%12s,L=0x%04X): %s", info_tag, exif_get_tagname (info_tag, buffer, -12 , exif_get_tag_table(section_index)), info_data->length, info_data->format==TAG_FMT_STRING?(info_value&&info_value->s?info_value->s:"<no data>"):exif_get_tagformat(info_data->format));*/
2415
+ /* php_error_docref(NULL, E_NOTICE, "Adding infos: tag(0x%04X,%12s,L=0x%04X): %s", info_tag, exif_get_tagname_debug (info_tag, exif_get_tag_table(section_index)), info_data->length, info_data->format==TAG_FMT_STRING?(info_value&&info_value->s?info_value->s:"<no data>"):exif_get_tagformat(info_data->format));*/
2420
2416
#endif
2421
2417
if (info_data -> length == 0 ) {
2422
2418
add_assoc_null (& tmpi , name );
@@ -2736,9 +2732,8 @@ PHP_FUNCTION(exif_tagname)
2736
2732
return ;
2737
2733
}
2738
2734
2739
- szTemp = exif_get_tagname (tag , NULL , 0 , tag_table_IFD );
2740
-
2741
- if (tag < 0 || !szTemp || !szTemp [0 ]) {
2735
+ szTemp = exif_get_tagname (tag , tag_table_IFD );
2736
+ if (tag < 0 || !szTemp ) {
2742
2737
RETURN_FALSE ;
2743
2738
}
2744
2739
@@ -2879,7 +2874,7 @@ static void exif_thumbnail_build(image_info_type *ImageInfo) {
2879
2874
info_data = & info_list -> list [i ];
2880
2875
byte_count = php_tiff_bytes_per_format [info_data -> format ] * info_data -> length ;
2881
2876
#ifdef EXIF_DEBUG
2882
- exif_error_docref (NULL EXIFERR_CC , ImageInfo , E_NOTICE , "Thumbnail: process tag(x%04X=%s): %s%s (%d bytes)" , info_data -> tag , exif_get_tagname (info_data -> tag , tagname , -12 , tag_table_IFD ), (info_data -> length > 1 )&& info_data -> format != TAG_FMT_UNDEFINED && info_data -> format != TAG_FMT_STRING ?"ARRAY OF " :"" , exif_get_tagformat (info_data -> format ), byte_count );
2877
+ exif_error_docref (NULL EXIFERR_CC , ImageInfo , E_NOTICE , "Thumbnail: process tag(x%04X=%s): %s%s (%d bytes)" , info_data -> tag , exif_get_tagname_debug (info_data -> tag , tag_table_IFD ), (info_data -> length > 1 )&& info_data -> format != TAG_FMT_UNDEFINED && info_data -> format != TAG_FMT_STRING ?"ARRAY OF " :"" , exif_get_tagformat (info_data -> format ), byte_count );
2883
2878
#endif
2884
2879
if (info_data -> tag == TAG_STRIP_OFFSETS || info_data -> tag == TAG_JPEG_INTERCHANGE_FORMAT ) {
2885
2880
php_ifd_set16u (new_data + 0 , info_data -> tag , ImageInfo -> motorola_intel );
@@ -3224,7 +3219,7 @@ static int exif_process_IFD_in_MAKERNOTE(image_info_type *ImageInfo, char * valu
3224
3219
3225
3220
#define REQUIRE_NON_EMPTY () do { \
3226
3221
if (byte_count == 0) { \
3227
- exif_error_docref("exif_read_data#error_ifd" EXIFERR_CC, ImageInfo, E_WARNING, "Process tag(x%04X=%s): Cannot be empty", tag, exif_get_tagname (tag, tagname, -12 , tag_table)); \
3222
+ exif_error_docref("exif_read_data#error_ifd" EXIFERR_CC, ImageInfo, E_WARNING, "Process tag(x%04X=%s): Cannot be empty", tag, exif_get_tagname_debug (tag, tag_table)); \
3228
3223
return FALSE; \
3229
3224
} \
3230
3225
} while (0)
@@ -3258,15 +3253,15 @@ static int exif_process_IFD_TAG(image_info_type *ImageInfo, char *dir_entry, cha
3258
3253
3259
3254
if (!format || format > NUM_FORMATS ) {
3260
3255
/* (-1) catches illegal zero case as unsigned underflows to positive large. */
3261
- exif_error_docref ("exif_read_data#error_ifd" EXIFERR_CC , ImageInfo , E_WARNING , "Process tag(x%04X=%s): Illegal format code 0x%04X, suppose BYTE" , tag , exif_get_tagname (tag , tagname , -12 , tag_table ), format );
3256
+ exif_error_docref ("exif_read_data#error_ifd" EXIFERR_CC , ImageInfo , E_WARNING , "Process tag(x%04X=%s): Illegal format code 0x%04X, suppose BYTE" , tag , exif_get_tagname_debug (tag , tag_table ), format );
3262
3257
format = TAG_FMT_BYTE ;
3263
3258
/*return TRUE;*/
3264
3259
}
3265
3260
3266
3261
byte_count_signed = (int64_t )components * php_tiff_bytes_per_format [format ];
3267
3262
3268
3263
if (byte_count_signed < 0 || (byte_count_signed > INT32_MAX )) {
3269
- exif_error_docref ("exif_read_data#error_ifd" EXIFERR_CC , ImageInfo , E_WARNING , "Process tag(x%04X=%s): Illegal byte_count" , tag , exif_get_tagname (tag , tagname , -12 , tag_table ));
3264
+ exif_error_docref ("exif_read_data#error_ifd" EXIFERR_CC , ImageInfo , E_WARNING , "Process tag(x%04X=%s): Illegal byte_count" , tag , exif_get_tagname_debug (tag , tag_table ));
3270
3265
return FALSE;
3271
3266
}
3272
3267
@@ -3289,11 +3284,11 @@ static int exif_process_IFD_TAG(image_info_type *ImageInfo, char *dir_entry, cha
3289
3284
if (value_ptr < dir_entry ) {
3290
3285
/* we can read this if offset_val > 0 */
3291
3286
/* some files have their values in other parts of the file */
3292
- exif_error_docref ("exif_read_data#error_ifd" EXIFERR_CC , ImageInfo , E_WARNING , "Process tag(x%04X=%s): Illegal pointer offset(x%04X < x%04X)" , tag , exif_get_tagname (tag , tagname , -12 , tag_table ), offset_val , dir_entry );
3287
+ exif_error_docref ("exif_read_data#error_ifd" EXIFERR_CC , ImageInfo , E_WARNING , "Process tag(x%04X=%s): Illegal pointer offset(x%04X < x%04X)" , tag , exif_get_tagname_debug (tag , tag_table ), offset_val , dir_entry );
3293
3288
} else {
3294
3289
/* this is for sure not allowed */
3295
3290
/* exception are IFD pointers */
3296
- exif_error_docref ("exif_read_data#error_ifd" EXIFERR_CC , ImageInfo , E_WARNING , "Process tag(x%04X=%s): Illegal pointer offset(x%04X + x%04X = x%04X > x%04X)" , tag , exif_get_tagname (tag , tagname , -12 , tag_table ), offset_val , byte_count , offset_val + byte_count , IFDlength );
3291
+ exif_error_docref ("exif_read_data#error_ifd" EXIFERR_CC , ImageInfo , E_WARNING , "Process tag(x%04X=%s): Illegal pointer offset(x%04X + x%04X = x%04X > x%04X)" , tag , exif_get_tagname_debug (tag , tag_table ), offset_val , byte_count , offset_val + byte_count , IFDlength );
3297
3292
}
3298
3293
return FALSE;
3299
3294
}
@@ -3336,7 +3331,7 @@ static int exif_process_IFD_TAG(image_info_type *ImageInfo, char *dir_entry, cha
3336
3331
ImageInfo -> sections_found |= FOUND_ANY_TAG ;
3337
3332
#ifdef EXIF_DEBUG
3338
3333
dump_data = exif_dump_data (& dump_free , format , components , length , ImageInfo -> motorola_intel , value_ptr );
3339
- exif_error_docref (NULL EXIFERR_CC , ImageInfo , E_NOTICE , "Process tag(x%04X=%s,@x%04X + x%04X(=%d)): %s%s %s" , tag , exif_get_tagname (tag , tagname , -12 , tag_table ), offset_val + displacement , byte_count , byte_count , (components > 1 )&& format != TAG_FMT_UNDEFINED && format != TAG_FMT_STRING ?"ARRAY OF " :"" , exif_get_tagformat (format ), dump_data );
3334
+ exif_error_docref (NULL EXIFERR_CC , ImageInfo , E_NOTICE , "Process tag(x%04X=%s,@x%04X + x%04X(=%d)): %s%s %s" , tag , exif_get_tagname_debug (tag , tag_table ), offset_val + displacement , byte_count , byte_count , (components > 1 )&& format != TAG_FMT_UNDEFINED && format != TAG_FMT_STRING ?"ARRAY OF " :"" , exif_get_tagformat (format ), dump_data );
3340
3335
if (dump_free ) {
3341
3336
efree (dump_data );
3342
3337
}
@@ -3565,7 +3560,7 @@ static int exif_process_IFD_TAG(image_info_type *ImageInfo, char *dir_entry, cha
3565
3560
}
3566
3561
}
3567
3562
}
3568
- exif_iif_add_tag (ImageInfo , section_index , exif_get_tagname (tag , tagname , sizeof (tagname ), tag_table ), tag , format , components , value_ptr , byte_count );
3563
+ exif_iif_add_tag (ImageInfo , section_index , exif_get_tagname_key (tag , tagname , sizeof (tagname ), tag_table ), tag , format , components , value_ptr , byte_count );
3569
3564
EFREE_IF (outside );
3570
3565
return TRUE;
3571
3566
}
@@ -4003,7 +3998,6 @@ static int exif_process_IFD_in_TIFF(image_info_type *ImageInfo, size_t dir_offse
4003
3998
{
4004
3999
int i , sn , num_entries , sub_section_index = 0 ;
4005
4000
unsigned char * dir_entry ;
4006
- char tagname [64 ];
4007
4001
size_t ifd_size , dir_size , entry_offset , next_offset , entry_length , entry_value = 0 , fgot ;
4008
4002
int entry_tag , entry_type ;
4009
4003
tag_table_type tag_table = exif_get_tag_table (section_index );
@@ -4041,7 +4035,7 @@ static int exif_process_IFD_in_TIFF(image_info_type *ImageInfo, size_t dir_offse
4041
4035
entry_tag = php_ifd_get16u (dir_entry + 0 , ImageInfo -> motorola_intel );
4042
4036
entry_type = php_ifd_get16u (dir_entry + 2 , ImageInfo -> motorola_intel );
4043
4037
if (entry_type > NUM_FORMATS ) {
4044
- exif_error_docref (NULL EXIFERR_CC , ImageInfo , E_NOTICE , "Read from TIFF: tag(0x%04X,%12s): Illegal format code 0x%04X, switching to BYTE" , entry_tag , exif_get_tagname (entry_tag , tagname , -12 , tag_table ), entry_type );
4038
+ exif_error_docref (NULL EXIFERR_CC , ImageInfo , E_NOTICE , "Read from TIFF: tag(0x%04X,%12s): Illegal format code 0x%04X, switching to BYTE" , entry_tag , exif_get_tagname_debug (entry_tag , tag_table ), entry_type );
4045
4039
/* Since this is repeated in exif_process_IFD_TAG make it a notice here */
4046
4040
/* and make it a warning in the exif_process_IFD_TAG which is called */
4047
4041
/* elsewhere. */
@@ -4599,7 +4593,7 @@ PHP_FUNCTION(exif_read_data)
4599
4593
exif_iif_add_str (& ImageInfo , SECTION_COMPUTED , "Copyright.Editor" , ImageInfo .CopyrightEditor );
4600
4594
4601
4595
for (i = 0 ; i < ImageInfo .xp_fields .count ; i ++ ) {
4602
- exif_iif_add_str (& ImageInfo , SECTION_WINXP , exif_get_tagname (ImageInfo .xp_fields .list [i ].tag , NULL , 0 , exif_get_tag_table (SECTION_WINXP )), ImageInfo .xp_fields .list [i ].value );
4596
+ exif_iif_add_str (& ImageInfo , SECTION_WINXP , exif_get_tagname_debug (ImageInfo .xp_fields .list [i ].tag , exif_get_tag_table (SECTION_WINXP )), ImageInfo .xp_fields .list [i ].value );
4603
4597
}
4604
4598
if (ImageInfo .Thumbnail .size ) {
4605
4599
if (read_thumbnail ) {
0 commit comments