1) Added support for Olympus S760 & S770 makernote (bug #1703284)
authorJan Patera <patera@pictview.com>
Tue, 8 May 2007 09:09:06 +0000 (11:09 +0200)
committerJan Patera <patera@pictview.com>
Tue, 8 May 2007 09:09:06 +0000 (11:09 +0200)
2) Interoperability Version value is now obtained
3) Fixed crashes when looking up invalid values (bug #1457501)

libexif/exif-data.c
libexif/exif-entry.c

index 6ff40f5..3416f19 100644 (file)
@@ -663,8 +663,8 @@ exif_data_get_type_maker_note (ExifData *d)
                return EXIF_DATA_TYPE_MAKER_NOTE_NONE;
 
        /* Olympus & Nikon */
-       if ((e->size >= 5) && (!memcmp (e->data, "OLYMP", 5) ||
-                              !memcmp (e->data, "Nikon", 5)))
+       if ((e->size >= 8) && (!memcmp (e->data, "OLYMP", 6) ||
+                       !memcmp (e->data, "OLYMPUS", 8) || !memcmp (e->data, "Nikon", 6)))
                return EXIF_DATA_TYPE_MAKER_NOTE_OLYMPUS;
 
        em = exif_data_get_entry (d, EXIF_TAG_MAKE);
index bbc7b2e..1fc4cc9 100644 (file)
@@ -533,7 +533,8 @@ static struct {
   { EXIF_TAG_COLOR_SPACE,
     { {1, {N_("sRGB"), NULL}},
       {2, {N_("Adobe RGB"), NULL}},
-      {0xffff, {N_("Uncalibrated"), NULL}}}},
+      {0xffff, {N_("Uncalibrated"), NULL}},
+      {0x0000, {NULL}}}},
   {0, }
 };
 
@@ -918,7 +919,7 @@ exif_entry_get_value (ExifEntry *e, char *val, unsigned int maxlen)
                }
 
                /* Find the value */
-               for (j = 0; list2[i].elem[j].values &&
+               for (j = 0; list2[i].elem[j].values[0] &&
                            (list2[i].elem[j].index < v_short); j++);
                if (list2[i].elem[j].index != v_short) {
                        snprintf (val, maxlen, _("Internal error (unknown "
@@ -928,8 +929,7 @@ exif_entry_get_value (ExifEntry *e, char *val, unsigned int maxlen)
 
                /* Find a short enough value */
                memset (val, 0, maxlen);
-               for (k = 0; list2[i].elem[j].values &&
-                           list2[i].elem[j].values[k]; k++) {
+               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);
@@ -968,6 +968,10 @@ exif_entry_get_value (ExifEntry *e, char *val, unsigned int maxlen)
                else
                        strncpy (val, _(list[i].strings[j]), maxlen - 1);
                break;  
+       case EXIF_TAG_INTEROPERABILITY_VERSION:
+               CF (e, EXIF_FORMAT_UNDEFINED, val, maxlen);
+               strncpy (val, (char *) e->data, MIN (maxlen, e->size));
+               break;
        default:
                if (!e->components) break;
                switch (e->format) {