From f59c8a71e975a58a4327eb6b3c659f8f3a0c279c01a0bba48e9b3b8142b1d34c Mon Sep 17 00:00:00 2001 From: OBS User unknown Date: Mon, 20 Aug 2007 15:33:58 +0000 Subject: [PATCH] OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/libexif?expand=0&rev=7 --- libexif-current.patch | 273 ++++++++++++++++++++++++++++++++++++++++++ libexif.changes | 5 + libexif.spec | 8 +- 3 files changed, 284 insertions(+), 2 deletions(-) create mode 100644 libexif-current.patch diff --git a/libexif-current.patch b/libexif-current.patch new file mode 100644 index 0000000..9de9d7f --- /dev/null +++ b/libexif-current.patch @@ -0,0 +1,273 @@ +diff -x '*.m4' -x '*.o' -x '*.lo' -ru libexif-0.6.16/ChangeLog /suse/meissner/projects/libexif/ChangeLog +--- libexif-0.6.16/ChangeLog 2007-05-23 16:06:35.000000000 +0200 ++++ /suse/meissner/projects/libexif/ChangeLog 2007-08-20 11:02:55.903507000 +0200 +@@ -1,3 +1,14 @@ ++2007-08-16 Jan Patera ++ ++ * exif-mnote-data-olympus.c: Fix of bugs #1773810, #1774626, gnome bug #466044: ++ Some Olympus files have main IFD in MM byte order as well as makernote, but ++ makernote order was guessed wrongly. Bug introduced when fixing bug #1525770. ++ ++2007-06-25 Jan Patera ++ ++ * Endianess of Nikon V1 makernotes is now guessed, it might not ++ be the same as of the main IFD ++ + 2007-05-21 Jan Patera + + * First version of Czech localization (cs.po) +diff -x '*.m4' -x '*.o' -x '*.lo' -ru libexif-0.6.16/libexif/exif-data.c /suse/meissner/projects/libexif/libexif/exif-data.c +--- libexif-0.6.16/libexif/exif-data.c 2007-06-12 17:52:25.000000000 +0200 ++++ /suse/meissner/projects/libexif/libexif/exif-data.c 2007-07-05 19:02:47.068150000 +0200 +@@ -194,6 +195,9 @@ + if (entry->data) { + entry->size = s; + memcpy (entry->data, d + doff, s); ++ } else { ++ /* FIXME: What do our callers do if (entry->data == NULL)? */ ++ EXIF_LOG_NO_MEMORY(data->priv->log, "ExifData", s); + } + + /* If this is the MakerNote, remember the offset */ +@@ -202,8 +206,7 @@ + exif_log (data->priv->log, + EXIF_LOG_CODE_DEBUG, "ExifData", + "MakerNote found with NULL data"); +- } +- else if (entry->size > 6) ++ } else if (entry->size > 6) { + exif_log (data->priv->log, + EXIF_LOG_CODE_DEBUG, "ExifData", + "MakerNote found (%02x %02x %02x %02x " +@@ -211,6 +214,7 @@ + entry->data[0], entry->data[1], entry->data[2], + entry->data[3], entry->data[4], entry->data[5], + entry->data[6]); ++ } + data->priv->offset_mnote = doff; + } + return 1; +@@ -334,8 +338,10 @@ + + if (!data || !data->priv) + return; +- if ((ifd < 0) || (ifd >= EXIF_IFD_COUNT)) +- return; ++ ++ /* check for valid ExifIfd enum range */ ++ if (( ((int)ifd) < 0) || ( ((int)ifd) >= EXIF_IFD_COUNT)) ++ return; + + if (recursion_depth > 150) { + exif_log (data->priv->log, EXIF_LOG_CODE_CORRUPT_DATA, "ExifData", +diff -x '*.m4' -x '*.o' -x '*.lo' -ru libexif-0.6.16/libexif/exif-entry.c /suse/meissner/projects/libexif/libexif/exif-entry.c +--- libexif-0.6.16/libexif/exif-entry.c 2007-05-23 16:06:37.000000000 +0200 ++++ /suse/meissner/projects/libexif/libexif/exif-entry.c 2007-07-05 19:02:47.150071000 +0200 +@@ -581,9 +581,10 @@ + return val; + o = exif_data_get_byte_order (e->parent->parent); + ++ /* make sure the returned string is zero terminated */ + memset (val, 0, maxlen); +- memset (b, 0, sizeof (b)); + maxlen--; ++ memset (b, 0, sizeof (b)); + + /* Sanity check */ + if (e->size != e->components * exif_format_get_size (e->format)) { +@@ -863,7 +864,7 @@ + case EXIF_TAG_MAKER_NOTE: + CF (e, EXIF_FORMAT_UNDEFINED, val, maxlen); + snprintf (val, maxlen, _("%i bytes unknown data"), +- (int) e->components); ++ e->size); + break; + case EXIF_TAG_SUBJECT_AREA: + CF (e, EXIF_FORMAT_SHORT, val, maxlen); +@@ -914,7 +915,7 @@ + /* Search the tag */ + for (i = 0; list2[i].tag && (list2[i].tag != e->tag); i++); + if (!list2[i].tag) { +- strncpy (val, _("Internal error."), maxlen - 1); ++ strncpy (val, _("Internal error"), maxlen); + break; + } + +@@ -923,7 +924,7 @@ + (list2[i].elem[j].index < v_short); j++); + if (list2[i].elem[j].index != v_short) { + snprintf (val, maxlen, _("Internal error (unknown " +- "value %i)."), v_short); ++ "value %i)"), v_short); + break; + } + +@@ -932,7 +933,7 @@ + for (k = 0; list2[i].elem[j].values[k]; k++) { + l = strlen (_(list2[i].elem[j].values[k])); + if ((maxlen > l) && (strlen (val) < l)) +- strncpy (val, _(list2[i].elem[j].values[k]), maxlen - 1); ++ strncpy (val, _(list2[i].elem[j].values[k]), maxlen); + } + if (!strlen (val)) snprintf (val, maxlen, "%i", v_short); + +@@ -957,7 +958,7 @@ + /* Search the tag */ + for (i = 0; list[i].tag && (list[i].tag != e->tag); i++); + if (!list[i].tag) { +- strncpy (val, _("Internal error."), maxlen - 1); ++ strncpy (val, _("Internal error"), maxlen); + break; + } + +@@ -966,7 +967,7 @@ + if (!list[i].strings[j]) + snprintf (val, maxlen, "%i", v_short); + else +- strncpy (val, _(list[i].strings[j]), maxlen - 1); ++ strncpy (val, _(list[i].strings[j]), maxlen); + break; + case EXIF_TAG_XP_TITLE: + case EXIF_TAG_XP_COMMENT: +@@ -1098,6 +1099,10 @@ + return val; + } + ++ ++/** ++ * \bug Log and report failed exif_mem_malloc() calls. ++ */ + void + exif_entry_initialize (ExifEntry *e, ExifTag tag) + { +@@ -1126,6 +1131,7 @@ + e->format = EXIF_FORMAT_LONG; + e->size = exif_format_get_size (e->format) * e->components; + e->data = exif_entry_alloc (e, e->size); ++ if (!e->data) break; + break; + + /* SHORT, 1 component, no default */ +@@ -1154,6 +1160,7 @@ + e->format = EXIF_FORMAT_SHORT; + e->size = exif_format_get_size (e->format) * e->components; + e->data = exif_entry_alloc (e, e->size); ++ if (!e->data) break; + exif_set_short (e->data, o, 0); + break; + +@@ -1165,6 +1172,7 @@ + e->format = EXIF_FORMAT_SHORT; + e->size = exif_format_get_size (e->format) * e->components; + e->data = exif_entry_alloc (e, e->size); ++ if (!e->data) break; + exif_set_short (e->data, o, 1); + break; + +@@ -1175,6 +1183,7 @@ + e->format = EXIF_FORMAT_SHORT; + e->size = exif_format_get_size (e->format) * e->components; + e->data = exif_entry_alloc (e, e->size); ++ if (!e->data) break; + exif_set_short (e->data, o, 2); + break; + +@@ -1184,6 +1193,7 @@ + e->format = EXIF_FORMAT_SHORT; + e->size = exif_format_get_size (e->format) * e->components; + e->data = exif_entry_alloc (e, e->size); ++ if (!e->data) break; + exif_set_short (e->data, o, 3); + break; + +@@ -1221,6 +1231,7 @@ + e->format = EXIF_FORMAT_SRATIONAL; + e->size = exif_format_get_size (e->format) * e->components; + e->data = exif_entry_alloc (e, e->size); ++ if (!e->data) break; + break; + + /* RATIONAL, 1 component, no default */ +@@ -1241,6 +1252,7 @@ + e->format = EXIF_FORMAT_RATIONAL; + e->size = exif_format_get_size (e->format) * e->components; + e->data = exif_entry_alloc (e, e->size); ++ if (!e->data) break; + break; + + /* RATIONAL, 1 component, default 72/1 */ +@@ -1250,6 +1262,7 @@ + e->format = EXIF_FORMAT_RATIONAL; + e->size = exif_format_get_size (e->format) * e->components; + e->data = exif_entry_alloc (e, e->size); ++ if (!e->data) break; + r.numerator = 72; + r.denominator = 1; + exif_set_rational (e->data, o, r); +@@ -1261,6 +1274,7 @@ + e->format = EXIF_FORMAT_RATIONAL; + e->size = exif_format_get_size (e->format) * e->components; + e->data = exif_entry_alloc (e, e->size); ++ if (!e->data) break; + break; + + /* RATIONAL, 6 components */ +diff -x '*.m4' -x '*.o' -x '*.lo' -ru libexif-0.6.16/libexif/exif-loader.c /suse/meissner/projects/libexif/libexif/exif-loader.c +--- libexif-0.6.16/libexif/exif-loader.c 2006-10-16 13:03:31.000000000 +0200 ++++ /suse/meissner/projects/libexif/libexif/exif-loader.c 2007-07-05 19:02:47.204013000 +0200 +@@ -263,7 +263,7 @@ + default: + switch (eld->b[i]) { + case JPEG_MARKER_APP1: +- if (!memcmp (eld->b + i + 3, ExifHeader, MIN(sizeof (ExifHeader), MAX(0, sizeof (eld->b) - i - 3)))) { ++ if (!memcmp (eld->b + i + 3, ExifHeader, MIN((ssize_t)(sizeof(ExifHeader)), MAX(0, ((ssize_t)(sizeof(eld->b))) - ((ssize_t)i) - 3)))) { + eld->data_format = EL_DATA_FORMAT_EXIF; + } else { + eld->data_format = EL_DATA_FORMAT_JPEG; /* Probably JFIF - keep searching for APP1 EXIF*/ +diff -x '*.m4' -x '*.o' -x '*.lo' -ru libexif-0.6.16/libexif/exif-loader.h /suse/meissner/projects/libexif/libexif/exif-loader.h +--- libexif-0.6.16/libexif/exif-loader.h 2006-09-27 10:35:13.000000000 +0200 ++++ /suse/meissner/projects/libexif/libexif/exif-loader.h 2007-07-05 19:02:47.243970000 +0200 +@@ -24,7 +24,6 @@ + #define __EXIF_LOADER_H__ + + #include +-#include + #include + #include + +diff -x '*.m4' -x '*.o' -x '*.lo' -ru libexif-0.6.16/libexif/olympus/exif-mnote-data-olympus.c /suse/meissner/projects/libexif/libexif/olympus/exif-mnote-data-olympus.c +--- libexif-0.6.16/libexif/olympus/exif-mnote-data-olympus.c 2007-05-11 09:19:13.000000000 +0200 ++++ /suse/meissner/projects/libexif/libexif/olympus/exif-mnote-data-olympus.c 2007-08-20 11:02:57.048366000 +0200 +@@ -230,6 +230,15 @@ + else if (buf[o2 + 6 + 1] == 1) + n->order = EXIF_BYTE_ORDER_MOTOROLA; + o2 += 8; ++ if (o2 >= buf_size) return; ++ c = exif_get_short (buf + o2, n->order); ++ if ((!(c & 0xFF)) && (c > 0x500)) { ++ if (n->order == EXIF_BYTE_ORDER_INTEL) { ++ n->order = EXIF_BYTE_ORDER_MOTOROLA; ++ } else { ++ n->order = EXIF_BYTE_ORDER_INTEL; ++ } ++ } + + } else if (!memcmp (buf + o2, "OLYMPUS", 8)) { + /* Olympus S760, S770 */ +@@ -267,6 +276,16 @@ + case nikonV1: + + base = MNOTE_NIKON1_TAG_BASE; ++ /* Fix endianness, if needed */ ++ if (o2 >= buf_size) return; ++ c = exif_get_short (buf + o2, n->order); ++ if ((!(c & 0xFF)) && (c > 0x500)) { ++ if (n->order == EXIF_BYTE_ORDER_INTEL) { ++ n->order = EXIF_BYTE_ORDER_MOTOROLA; ++ } else { ++ n->order = EXIF_BYTE_ORDER_INTEL; ++ } ++ } + break; + + case nikonV2: diff --git a/libexif.changes b/libexif.changes index 6bb3699..ac88ff0 100644 --- a/libexif.changes +++ b/libexif.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Mon Aug 20 11:24:54 CEST 2007 - meissner@suse.de + +- merged stability bugfixes from upstream 0.6.16.2. + ------------------------------------------------------------------- Wed Jun 13 09:22:59 CEST 2007 - meissner@suse.de diff --git a/libexif.spec b/libexif.spec index 78fa300..d73cedf 100644 --- a/libexif.spec +++ b/libexif.spec @@ -13,13 +13,14 @@ Name: libexif BuildRequires: doxygen URL: http://libexif.sourceforge.net -License: GNU Library General Public License v. 2.0 and 2.1 (LGPL) +License: LGPL v2 or later Group: Development/Libraries/C and C++ Summary: An EXIF Tag Parsing Library for Digital Cameras Version: 0.6.16 -Release: 1 +Release: 14 BuildRoot: %{_tmppath}/%{name}-%{version}-build Source0: %{name}-%{version}.tar.bz2 +Patch0: libexif-current.patch %description This library is used to parse EXIF information from JPEGs created by @@ -50,6 +51,7 @@ Authors: %prep %setup -q +%patch0 -p1 %build %configure \ @@ -86,6 +88,8 @@ rm -rf $RPM_BUILD_ROOT %{_includedir}/* %changelog +* Mon Aug 20 2007 - meissner@suse.de +- merged stability bugfixes from upstream 0.6.16.2. * Wed Jun 13 2007 - meissner@suse.de - upgraded to 0.6.16 - fixed a integer overflow security problem