This commit is contained in:
parent
ce40b073e3
commit
f59c8a71e9
273
libexif-current.patch
Normal file
273
libexif-current.patch
Normal file
@ -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 <patera@users.sourceforge.net>
|
||||
+
|
||||
+ * 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 <patera@users.sourceforge.net>
|
||||
+
|
||||
+ * Endianess of Nikon V1 makernotes is now guessed, it might not
|
||||
+ be the same as of the main IFD
|
||||
+
|
||||
2007-05-21 Jan Patera <patera@users.sourceforge.net>
|
||||
|
||||
* 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 <libexif/exif-data.h>
|
||||
-#include <libexif/exif-loader.h>
|
||||
#include <libexif/exif-log.h>
|
||||
#include <libexif/exif-mem.h>
|
||||
|
||||
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:
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user