- /* -2 means 'take all but the last 2 bytes which are hoped to be JPEG_MARKER_EOI */
- data->size = size - 2 - o - len;
- if (d[o + len + data->size] != 0xFF) {
- /* A truncated file (i.e. w/o JPEG_MARKER_EOI at the end).
- Instead of trying to use the last two bytes as marker,
- touching memory beyond allocated memory and posssibly saving
- back screwed file, we rather take the rest of the file. */
- data->size += 2;
+ data->size = size - o - len;
+ if (data->size >= 2) {
+ /* -2 means 'take all but the last 2 bytes which are
+ hoped to be JPEG_MARKER_EOI */
+ data->size -= 2;
+ if (d[o + len + data->size] != 0xFF) {
+ /* A truncated file (i.e. w/o JPEG_MARKER_EOI at the end).
+ Instead of trying to use the last two bytes as marker,
+ touching memory beyond allocated memory and posssibly saving
+ back screwed file, we rather take the rest of the file. */
+ data->size += 2;
+ }