libexif/backport-CVE-2020-0452.patch
zhouwenpei c9b0cb4933 fix CVE-2020-0452
(cherry picked from commit afef81fb7a1bfe1d0588c283e123979cac2743ad)
2024-01-15 15:17:22 +08:00

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 */