| Index: libexif/exif-data.c | 
| diff --git a/libexif/exif-data.c b/libexif/exif-data.c | 
| index 67df4db2bec0547ad8758c997c834bc6f7f69669..e33d69647440c41a1aea6b28b3d5f1bb5c645900 100644 | 
| --- a/libexif/exif-data.c | 
| +++ b/libexif/exif-data.c | 
| @@ -364,6 +364,7 @@ exif_data_load_data_content (ExifData *data, ExifIfd ifd, | 
| ExifEntry *entry; | 
| unsigned int i; | 
| ExifTag tag; | 
| +	const unsigned int original_offset = offset; | 
|  | 
| if (!data || !data->priv) | 
| return; | 
| @@ -416,14 +417,20 @@ exif_data_load_data_content (ExifData *data, ExifIfd ifd, | 
| switch (tag) { | 
| case EXIF_TAG_EXIF_IFD_POINTER: | 
| CHECK_REC (EXIF_IFD_EXIF); | 
| +				if (o == original_offset) | 
| +					return; | 
| exif_data_load_data_content (data, EXIF_IFD_EXIF, d, ds, o, recursion_depth + 1); | 
| break; | 
| case EXIF_TAG_GPS_INFO_IFD_POINTER: | 
| CHECK_REC (EXIF_IFD_GPS); | 
| +				if (o == original_offset) | 
| +					return; | 
| exif_data_load_data_content (data, EXIF_IFD_GPS, d, ds, o, recursion_depth + 1); | 
| break; | 
| case EXIF_TAG_INTEROPERABILITY_IFD_POINTER: | 
| CHECK_REC (EXIF_IFD_INTEROPERABILITY); | 
| +				if (o == original_offset) | 
| +					return; | 
| exif_data_load_data_content (data, EXIF_IFD_INTEROPERABILITY, d, ds, o, recursion_depth + 1); | 
| break; | 
| case EXIF_TAG_JPEG_INTERCHANGE_FORMAT: | 
|  |