38 lines
1.3 KiB
Diff
38 lines
1.3 KiB
Diff
Backported of:
|
|
|
|
From 9266d14b5ca4e29b970fa03272318e5f99386e06 Mon Sep 17 00:00:00 2001
|
|
From: Marcus Meissner <marcus@jet.franken.de>
|
|
Date: Thu, 5 Nov 2020 09:50:08 +0100
|
|
Subject: [PATCH] fixed a incorrect overflow check that could be optimized
|
|
away.
|
|
|
|
inspired by:
|
|
https://android.googlesource.com/platform/external/libexif/+/8e7345f3bc0bad06ac369d6cbc1124c8ceaf7d4b
|
|
|
|
https://source.android.com/security/bulletin/2020-11-01
|
|
|
|
CVE-2020-0452
|
|
Index: libexif-0.6.21/libexif/exif-entry.c
|
|
===================================================================
|
|
--- libexif-0.6.21.orig/libexif/exif-entry.c
|
|
+++ libexif-0.6.21/libexif/exif-entry.c
|
|
@@ -28,6 +28,7 @@
|
|
#include <ctype.h>
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
+#include <stdint.h>
|
|
#include <string.h>
|
|
#include <time.h>
|
|
#include <math.h>
|
|
@@ -1376,8 +1377,8 @@ exif_entry_get_value (ExifEntry *e, char
|
|
case EXIF_TAG_XP_KEYWORDS:
|
|
case EXIF_TAG_XP_SUBJECT:
|
|
{
|
|
- /* Sanity check the size to prevent overflow */
|
|
- if (e->size+sizeof(unsigned short) < e->size) break;
|
|
+ /* Sanity check the size to prevent overflow. Note EXIF files are 64kb at most. */
|
|
+ if (e->size >= 65536 - sizeof(uint16_t)*2) break;
|
|
|
|
/* The tag may not be U+0000-terminated , so make a local
|
|
U+0000-terminated copy before converting it */
|