--- canon.c.orig Fri May 11 19:03:30 2012 +++ canon.c Sat Jul 12 19:43:53 2014 @@ -943,14 +943,14 @@ canon_prop01(struct exifprop *aprop, struct exifprop * switch (aprop->tag) { case 2: aprop->lvl = v ? ED_IMG : ED_VRB; - exifstralloc(&aprop->str, 32); - snprintf(aprop->str, 31, "%d sec", v / 10); + exifstralloc(&aprop->str, PROPSTR_SIZE); + snprintf(aprop->str, PROPSTR_SIZE, "%d sec", v / 10); break; case 5: /* Change "Single" to "Timed" if #2 > 0. */ if (!v && exif2byte(off + 2 * 2, t->mkrmd.order)) - strcpy(aprop->str, "Timed"); + strlcpy(aprop->str, "Timed", PROPSTR_SIZE); break; case 12: aprop->lvl = v ? ED_IMG : ED_VRB; @@ -961,8 +961,8 @@ canon_prop01(struct exifprop *aprop, struct exifprop * */ if (v == 3 && prop->count >= 37) { - exifstralloc(&aprop->str, 32); - snprintf(aprop->str, 31, "x%.1f", 2 * + exifstralloc(&aprop->str, PROPSTR_SIZE); + snprintf(aprop->str, PROPSTR_SIZE, "x%.1f", 2 * (float)exif2byte(off + 37 * 2, t->mkrmd.order) / (float)exif2byte(off + 36 * 2, t->mkrmd.order)); } else @@ -1010,8 +1010,8 @@ canon_prop04(struct exifprop *aprop, struct exifprop * switch (aprop->tag) { case 6: /* Calculate sensor speed (ISO units). */ - exifstralloc(&aprop->str, 32); - snprintf(aprop->str, 31, "%d", (int)(exp(calcev(NULL, 0, v) * + exifstralloc(&aprop->str, PROPSTR_SIZE); + snprintf(aprop->str, PROPSTR_SIZE, "%d", (int)(exp(calcev(NULL, 0, v) * log(2)) * 100.0 / 32.0 + 0.5)); break; @@ -1087,8 +1087,8 @@ canon_propA0(struct exifprop *aprop, struct exifprop * switch (aprop->tag) { case 9: - exifstralloc(&aprop->str, 32); - snprintf(aprop->str, 31, "%d K", aprop->value); + exifstralloc(&aprop->str, PROPSTR_SIZE); + snprintf(aprop->str, PROPSTR_SIZE, "%d K", aprop->value); break; default: return (FALSE); @@ -1147,8 +1147,8 @@ canon_subval(struct exifprop *prop, struct exiftags *t if (valfun && !valfun(aprop, prop, off, t)) { if (aprop->lvl != ED_UNK) continue; - exifstralloc(&aprop->str, 32); - snprintf(aprop->str, 31, "num %02d, val 0x%04X", i, v); + exifstralloc(&aprop->str, PROPSTR_SIZE); + snprintf(aprop->str, PROPSTR_SIZE, "num %02d, val 0x%04X", i, v); } } @@ -1271,14 +1271,14 @@ canon_prop(struct exifprop *prop, struct exiftags *t) tmpprop = childprop(prop); tmpprop->name = "CanonLensSz"; tmpprop->descr = "Lens Size"; - exifstralloc(&tmpprop->str, 32); + exifstralloc(&tmpprop->str, PROPSTR_SIZE); if (flmin == flmax) { - snprintf(tmpprop->str, 31, "%.2f mm", + snprintf(tmpprop->str, PROPSTR_SIZE, "%.2f mm", (float)flmax / (float)flunit); tmpprop->lvl = ED_VRB; } else { - snprintf(tmpprop->str, 31, "%.2f - %.2f mm", + snprintf(tmpprop->str, PROPSTR_SIZE, "%.2f - %.2f mm", (float)flmin / (float)flunit, (float)flmax / (float)flunit); tmpprop->lvl = ED_PAS;