0001-fixes-some-not-all-buffer-overreads-during-decoding-.patch 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. From 41bd04234b104312f54d25822f68738ba8d7133d Mon Sep 17 00:00:00 2001
  2. From: Marcus Meissner <marcus@jet.franken.de>
  3. Date: Tue, 25 Jul 2017 23:44:44 +0200
  4. Subject: [PATCH] fixes some (not all) buffer overreads during decoding pentax
  5. makernote entries.
  6. This should fix:
  7. https://sourceforge.net/p/libexif/bugs/125/ CVE-2016-6328
  8. Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
  9. ---
  10. libexif/pentax/mnote-pentax-entry.c | 16 +++++++++++++---
  11. 1 file changed, 13 insertions(+), 3 deletions(-)
  12. diff --git a/libexif/pentax/mnote-pentax-entry.c b/libexif/pentax/mnote-pentax-entry.c
  13. index d03d159..ea0429a 100644
  14. --- a/libexif/pentax/mnote-pentax-entry.c
  15. +++ b/libexif/pentax/mnote-pentax-entry.c
  16. @@ -425,24 +425,34 @@ mnote_pentax_entry_get_value (MnotePentaxEntry *entry,
  17. case EXIF_FORMAT_SHORT:
  18. {
  19. const unsigned char *data = entry->data;
  20. - size_t k, len = strlen(val);
  21. + size_t k, len = strlen(val), sizeleft;
  22. +
  23. + sizeleft = entry->size;
  24. for(k=0; k<entry->components; k++) {
  25. + if (sizeleft < 2)
  26. + break;
  27. vs = exif_get_short (data, entry->order);
  28. snprintf (val+len, maxlen-len, "%i ", vs);
  29. len = strlen(val);
  30. data += 2;
  31. + sizeleft -= 2;
  32. }
  33. }
  34. break;
  35. case EXIF_FORMAT_LONG:
  36. {
  37. const unsigned char *data = entry->data;
  38. - size_t k, len = strlen(val);
  39. + size_t k, len = strlen(val), sizeleft;
  40. +
  41. + sizeleft = entry->size;
  42. for(k=0; k<entry->components; k++) {
  43. + if (sizeleft < 4)
  44. + break;
  45. vl = exif_get_long (data, entry->order);
  46. snprintf (val+len, maxlen-len, "%li", (long int) vl);
  47. len = strlen(val);
  48. data += 4;
  49. + sizeleft -= 4;
  50. }
  51. }
  52. break;
  53. @@ -455,5 +465,5 @@ mnote_pentax_entry_get_value (MnotePentaxEntry *entry,
  54. break;
  55. }
  56. - return (val);
  57. + return val;
  58. }
  59. --
  60. 2.20.1