Returns true if an Exif header was seen.
+=cut
*/
int
/* rough check count + 1 entry + next offset */
if (offset + (2+12+4) > tiff->size) {
- mm_log((2, "offset %uld beyond end off Exif block"));
+ mm_log((2, "offset %lu beyond end off Exif block", offset));
return 0;
}
/* check we can fit the whole thing */
ifd_size = 2 + count * 12 + 4; /* count + count entries + next offset */
if (offset + ifd_size > tiff->size) {
- mm_log((2, "offset %uld beyond end off Exif block"));
+ mm_log((2, "offset %lu beyond end off Exif block", offset));
return 0;
}
if (entry->type == ift_rational || entry->type == ift_srational) {
double value;
char workstr[MAX_ARRAY_STRING];
+ size_t len = 0, item_len;
*workstr = '\0';
for (j = 0; j < entry->count; ++j) {
if (!tiff_get_tag_double_array(tiff, tag_index, &value, j)) {
mm_log((3, "unexpected failure from tiff_get_tag_double_array(..., %d, ..., %d)\n", tag_index, j));
return;
}
- if (j)
+ if (len >= sizeof(workstr) - 1) {
+ mm_log((3, "Buffer would overflow reading tag %#x\n", entry->tag));
+ return;
+ }
+ if (j) {
strcat(workstr, " ");
- sprintf(workstr + strlen(workstr), "%.6g", value);
+ ++len;
+ }
+#ifdef IMAGER_SNPRINTF
+ item_len = snprintf(workstr + len, sizeof(workstr)-len, "%.6g", value);
+#else
+ item_len = sprintf(workstr + len, "%.6g", value);
+#endif
+ len += item_len;
}
i_tags_set(&im->tags, map[i].name, workstr, -1);
}
|| entry->type == ift_byte) {
int value;
char workstr[MAX_ARRAY_STRING];
+ size_t len = 0, item_len;
*workstr = '\0';
for (j = 0; j < entry->count; ++j) {
if (!tiff_get_tag_int_array(tiff, tag_index, &value, j)) {
mm_log((3, "unexpected failure from tiff_get_tag_int_array(..., %d, ..., %d)\n", tag_index, j));
return;
}
- if (j)
+ if (len >= sizeof(workstr) - 1) {
+ mm_log((3, "Buffer would overflow reading tag %#x\n", entry->tag));
+ return;
+ }
+ if (j) {
strcat(workstr, " ");
- sprintf(workstr + strlen(workstr), "%d", value);
+ ++len;
+ }
+#ifdef IMAGER_SNPRINTF
+ item_len = snprintf(workstr + len, sizeof(workstr) - len, "%d", value);
+#else
+ item_len = sprintf(workstr + len, "%d", value);
+#endif
+ len += item_len;
}
i_tags_set(&im->tags, map[i].name, workstr, -1);
}
static unsigned
tiff_get16(imtiff *tiff, unsigned long offset) {
if (offset + 2 > tiff->size) {
- mm_log((3, "attempt to get16 at %uld in %uld image", offset, tiff->size));
+ mm_log((3, "attempt to get16 at %lu in %lu image", offset,
+ (unsigned long)tiff->size));
return 0;
}
static unsigned
tiff_get32(imtiff *tiff, unsigned long offset) {
if (offset + 4 > tiff->size) {
- mm_log((3, "attempt to get16 at %uld in %uld image", offset, tiff->size));
+ mm_log((3, "attempt to get16 at %lu in %lu image", offset,
+ (unsigned long)tiff->size));
return 0;
}
int result;
if (offset + 2 > tiff->size) {
- mm_log((3, "attempt to get16 at %uld in %uld image", offset, tiff->size));
+ mm_log((3, "attempt to get16 at %lu in %lu image", offset,
+ (unsigned long)tiff->size));
return 0;
}
unsigned work;
if (offset + 4 > tiff->size) {
- mm_log((3, "attempt to get16 at %uld in %uld image", offset, tiff->size));
+ mm_log((3, "attempt to get16 at %lu in %lu image", offset,
+ (unsigned long)tiff->size));
return 0;
}
tiff_get_rat(imtiff *tiff, unsigned long offset) {
unsigned long numer, denom;
if (offset + 8 > tiff->size) {
- mm_log((3, "attempt to get_rat at %lu in %lu image", offset, tiff->size));
+ mm_log((3, "attempt to get_rat at %lu in %lu image", offset,
+ (unsigned long)tiff->size));
return 0;
}
tiff_get_rats(imtiff *tiff, unsigned long offset) {
long numer, denom;
if (offset + 8 > tiff->size) {
- mm_log((3, "attempt to get_rat at %lu in %lu image", offset, tiff->size));
+ mm_log((3, "attempt to get_rat at %lu in %lu image", offset,
+ (unsigned long)tiff->size));
return 0;
}