@@ -178,7 +178,17 @@ vips_exif_load_data_without_fix( const void *data, size_t length )
178
178
}
179
179
180
180
exif_data_unset_option ( ed , EXIF_DATA_OPTION_FOLLOW_SPECIFICATION );
181
- exif_data_load_data ( ed , data , length );
181
+ if ( !vips_isprefix ( "Exif" , (char * ) data ) ) {
182
+ /* Ensure "Exif" prefix as loaders may not provide it.
183
+ */
184
+ void * data_with_prefix ;
185
+ data_with_prefix = g_malloc0 ( length + 6 );
186
+ memcpy ( data_with_prefix , "Exif\0\0" , 6 );
187
+ memcpy ( data_with_prefix + 6 , data , length );
188
+ exif_data_load_data ( ed , data_with_prefix , length + 6 );
189
+ g_free ( data_with_prefix );
190
+ } else
191
+ exif_data_load_data ( ed , data , length );
182
192
183
193
return ( ed );
184
194
}
@@ -1391,7 +1401,7 @@ vips__exif_update( VipsImage *image )
1391
1401
(void * ) & data , & length ) )
1392
1402
return ( -1 );
1393
1403
1394
- if ( !(ed = exif_data_new_from_data ( data , length )) )
1404
+ if ( !(ed = vips_exif_load_data_without_fix ( data , length )) )
1395
1405
return ( -1 );
1396
1406
}
1397
1407
else {
@@ -1401,12 +1411,13 @@ vips__exif_update( VipsImage *image )
1401
1411
EXIF_DATA_OPTION_FOLLOW_SPECIFICATION );
1402
1412
exif_data_set_data_type ( ed , EXIF_DATA_TYPE_COMPRESSED );
1403
1413
exif_data_set_byte_order ( ed , EXIF_BYTE_ORDER_INTEL );
1404
-
1405
- /* Create the mandatory EXIF fields with default data.
1406
- */
1407
- exif_data_fix ( ed );
1408
1414
}
1409
1415
1416
+ /* Make sure all required fields are there before we attach the vips
1417
+ * metadata.
1418
+ */
1419
+ exif_data_fix ( ed );
1420
+
1410
1421
/* Update EXIF tags from the image metadata.
1411
1422
*/
1412
1423
vips_exif_update ( ed , image );
0 commit comments