This is an automated email from the git hooks/post-receive script.

sebastic pushed a commit to branch wheezy
in repository freexl.

commit 5d5e3377d28d21964b9aecf938842ad2d109b56c
Author: Bas Couwenberg <[email protected]>
Date:   Sat Sep 16 23:19:16 2017 +0200

    Add upstream patch to fix CVE-2017-2923 & CVE-2017-2924. (closes: #875690, 
#875691)
---
 debian/changelog                                 |   7 +
 debian/patches/CVE-2017-2923_CVE-2017-2924.patch | 317 +++++++++++++++++++++++
 debian/patches/series                            |   1 +
 3 files changed, 325 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index 51d63fd..d69801e 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+freexl (1.0.0b-1+deb7u4) wheezy-security; urgency=high
+
+  * Add upstream patch to fix CVE-2017-2923 & CVE-2017-2924.
+    (closes: #875690, #875691)
+
+ -- Bas Couwenberg <[email protected]>  Sat, 16 Sep 2017 23:26:04 +0200
+
 freexl (1.0.0b-1+deb7u3) wheezy-security; urgency=high
 
   * Add patch to fix regression introduced by afl-vulnerabilitities.patch.
diff --git a/debian/patches/CVE-2017-2923_CVE-2017-2924.patch 
b/debian/patches/CVE-2017-2923_CVE-2017-2924.patch
new file mode 100644
index 0000000..e4f97bc
--- /dev/null
+++ b/debian/patches/CVE-2017-2923_CVE-2017-2924.patch
@@ -0,0 +1,317 @@
+Description: fixing a security issue - Cisco TALOS-2017-430 and TALOS-2017-431
+ CVE-2017-2923 & CVE-2017-2924
+Author: Alessandro Furieri <[email protected]>
+Origin: https://www.gaia-gis.it/fossil/freexl/ci/40c17539ea56f0d8
+Bug-Debian: https://bugs.debian.org/875690
+            https://bugs.debian.org/875691
+
+--- a/src/freexl.c
++++ b/src/freexl.c
+@@ -935,6 +935,21 @@ set_sst_value (biff_workbook * workbook,
+     return FREEXL_OK;
+ }
+ 
++static size_t
++xls_fread (size_t bufsz, void *buf, size_t size, size_t nmemb, FILE * fl)
++{
++/* 
++/ Sandro 2017-09-07
++/ secure version of "fread" checking against buffer overflows 
++/---------------------------
++/ expected to fix the issue reported by
++/ Cisco [TALOS-2017-431]
++*/
++    if ((size * nmemb) > bufsz)
++      return 0;
++    return fread (buf, size, nmemb, fl);
++}
++
+ static fat_chain *
+ alloc_fat_chain (int swap, unsigned short sector_shift,
+                unsigned int directory_start)
+@@ -1377,7 +1392,8 @@ read_fat_sector (FILE * xls, fat_chain *
+       max_fat = 128;
+ 
+ /* reading a FAT sector */
+-    if (fread (buf, 1, chain->sector_size, xls) != chain->sector_size)
++    if (xls_fread (sizeof (buf), buf, 1, chain->sector_size, xls) !=
++      chain->sector_size)
+       return FREEXL_CFBF_READ_ERROR;
+ 
+     for (i_fat = 0; i_fat < max_fat; i_fat++)
+@@ -1419,7 +1435,8 @@ read_difat_sectors (FILE * xls, fat_chai
+         if (fseek (xls, where, SEEK_SET) != 0)
+             return FREEXL_CFBF_SEEK_ERROR;
+         /* reading a DIFAT sector */
+-        if (fread (&difat, 1, chain->sector_size, xls) != chain->sector_size)
++        if (xls_fread (sizeof (difat), &difat, 1, chain->sector_size, xls) !=
++            chain->sector_size)
+             return FREEXL_CFBF_READ_ERROR;
+         blocks++;
+         if (chain->swap)
+@@ -1480,7 +1497,8 @@ read_miniFAT_sectors (FILE * xls, fat_ch
+         unsigned char *p_buf = buf;
+         block++;
+         /* reading a miniFAT sector */
+-        if (fread (&buf, 1, chain->sector_size, xls) != chain->sector_size)
++        if (xls_fread (sizeof (buf), &buf, 1, chain->sector_size, xls) !=
++            chain->sector_size)
+             return FREEXL_CFBF_READ_ERROR;
+         for (i_fat = 0; i_fat < max_fat; i_fat++)
+           {
+@@ -1508,7 +1526,7 @@ read_cfbf_header (biff_workbook * workbo
+     int ret;
+     unsigned char *p_fat = header.fat_sector_map;
+ 
+-    if (fread (&header, 1, 512, workbook->xls) != 512)
++    if (xls_fread (sizeof (header), &header, 1, 512, workbook->xls) != 512)
+       {
+         *err_code = FREEXL_CFBF_READ_ERROR;
+         return NULL;
+@@ -1654,8 +1672,9 @@ read_mini_stream (biff_workbook * workbo
+               *errcode = FREEXL_CFBF_SEEK_ERROR;
+               return 0;
+           }
+-        if (fread (buf, 1, workbook->fat->sector_size, workbook->xls) !=
+-            workbook->fat->sector_size)
++        if (xls_fread
++            (sizeof (buf), buf, 1, workbook->fat->sector_size,
++             workbook->xls) != workbook->fat->sector_size)
+           {
+               *errcode = FREEXL_CFBF_READ_ERROR;
+               return 0;
+@@ -1987,7 +2006,7 @@ legacy_emergency_dimension (biff_workboo
+         /* looping on BIFF records */
+         if (!first)
+           {
+-              if (fread (&buf, 1, 4, workbook->xls) != 4)
++              if (xls_fread (sizeof (buf), &buf, 1, 4, workbook->xls) != 4)
+                   return 0;
+               memcpy (record_type.bytes, buf, 2);
+               memcpy (record_size.bytes, buf + 2, 2);
+@@ -2013,9 +2032,9 @@ legacy_emergency_dimension (biff_workboo
+               /* INTEGER marker found */
+               biff_word16 word16;
+ 
+-              if (fread
+-                  (workbook->record, 1, record_size.value,
+-                   workbook->xls) != record_size.value)
++              if (xls_fread
++                  (sizeof (workbook->record), workbook->record, 1,
++                   record_size.value, workbook->xls) != record_size.value)
+                   return 0;
+ 
+               memcpy (word16.bytes, workbook->record, 2);
+@@ -2040,9 +2059,9 @@ legacy_emergency_dimension (biff_workboo
+               /* NUMBER marker found */
+               biff_word16 word16;
+ 
+-              if (fread
+-                  (workbook->record, 1, record_size.value,
+-                   workbook->xls) != record_size.value)
++              if (xls_fread
++                  (sizeof (workbook->record), workbook->record, 1,
++                   record_size.value, workbook->xls) != record_size.value)
+                   return 0;
+ 
+               memcpy (word16.bytes, workbook->record, 2);
+@@ -2065,9 +2084,9 @@ legacy_emergency_dimension (biff_workboo
+               /* RK marker found */
+               biff_word16 word16;
+ 
+-              if (fread
+-                  (workbook->record, 1, record_size.value,
+-                   workbook->xls) != record_size.value)
++              if (xls_fread
++                  (sizeof (workbook->record), workbook->record, 1,
++                   record_size.value, workbook->xls) != record_size.value)
+                   return 0;
+ 
+               memcpy (word16.bytes, workbook->record, 2);
+@@ -2092,9 +2111,9 @@ legacy_emergency_dimension (biff_workboo
+               /* LABEL marker found */
+               biff_word16 word16;
+ 
+-              if (fread
+-                  (workbook->record, 1, record_size.value,
+-                   workbook->xls) != record_size.value)
++              if (xls_fread
++                  (sizeof (workbook->record), workbook->record, 1,
++                   record_size.value, workbook->xls) != record_size.value)
+                   return 0;
+ 
+               memcpy (word16.bytes, workbook->record, 2);
+@@ -2171,7 +2190,7 @@ read_legacy_biff (biff_workbook * workbo
+ 
+ /* attempting to get the main BOF */
+     rewind (workbook->xls);
+-    if (fread (&buf, 1, 4, workbook->xls) != 4)
++    if (xls_fread (sizeof (buf), &buf, 1, 4, workbook->xls) != 4)
+       return 0;
+     memcpy (record_type.bytes, buf, 2);
+     memcpy (record_size.bytes, buf + 2, 2);
+@@ -2207,7 +2226,7 @@ read_legacy_biff (biff_workbook * workbo
+       {
+         /* looping on BIFF records */
+ 
+-        if (fread (&buf, 1, 4, workbook->xls) != 4)
++        if (xls_fread (sizeof (buf), &buf, 1, 4, workbook->xls) != 4)
+             return 0;
+         memcpy (record_type.bytes, buf, 2);
+         memcpy (record_size.bytes, buf + 2, 2);
+@@ -2233,9 +2252,9 @@ read_legacy_biff (biff_workbook * workbo
+         if (record_type.value == BIFF_CODEPAGE)
+           {
+               /* CODEPAGE marker found */
+-              if (fread
+-                  (workbook->record, 1, record_size.value,
+-                   workbook->xls) != record_size.value)
++              if (xls_fread
++                  (sizeof (workbook->record), workbook->record, 1,
++                   record_size.value, workbook->xls) != record_size.value)
+                   return 0;
+               memcpy (word16.bytes, workbook->record, 2);
+               if (swap)
+@@ -2251,9 +2270,9 @@ read_legacy_biff (biff_workbook * workbo
+         if (record_type.value == BIFF_DATEMODE)
+           {
+               /* DATEMODE marker found */
+-              if (fread
+-                  (workbook->record, 1, record_size.value,
+-                   workbook->xls) != record_size.value)
++              if (xls_fread
++                  (sizeof (workbook->record), workbook->record, 1,
++                   record_size.value, workbook->xls) != record_size.value)
+                   return 0;
+               memcpy (word16.bytes, workbook->record, 2);
+               if (swap)
+@@ -2285,9 +2304,9 @@ read_legacy_biff (biff_workbook * workbo
+               int is_date = 0;
+               int is_datetime = 0;
+               int is_time = 0;
+-              if (fread
+-                  (workbook->record, 1, record_size.value,
+-                   workbook->xls) != record_size.value)
++              if (xls_fread
++                  (sizeof (workbook->record), workbook->record, 1,
++                   record_size.value, workbook->xls) != record_size.value)
+                   return 0;
+ 
+               if (workbook->biff_version == FREEXL_BIFF_VER_2
+@@ -2353,9 +2372,9 @@ read_legacy_biff (biff_workbook * workbo
+               /* XF [Extended Format] marker found */
+               unsigned char format;
+               unsigned short s_format;
+-              if (fread
+-                  (workbook->record, 1, record_size.value,
+-                   workbook->xls) != record_size.value)
++              if (xls_fread
++                  (sizeof (workbook->record), workbook->record, 1,
++                   record_size.value, workbook->xls) != record_size.value)
+                   return 0;
+               switch (workbook->biff_version)
+                 {
+@@ -2385,9 +2404,9 @@ read_legacy_biff (biff_workbook * workbo
+               unsigned int rows;
+               unsigned short columns;
+               char *utf8_name;
+-              if (fread
+-                  (workbook->record, 1, record_size.value,
+-                   workbook->xls) != record_size.value)
++              if (xls_fread
++                  (sizeof (workbook->record), workbook->record, 1,
++                   record_size.value, workbook->xls) != record_size.value)
+                   return 0;
+ 
+               memcpy (word16.bytes, workbook->record + 2, 2);
+@@ -2435,9 +2454,9 @@ read_legacy_biff (biff_workbook * workbo
+                   (workbook, swap, record_type.value, record_size.value))
+                   return 0;
+ 
+-              if (fread
+-                  (workbook->record, 1, record_size.value,
+-                   workbook->xls) != record_size.value)
++              if (xls_fread
++                  (sizeof (workbook->record), workbook->record, 1,
++                   record_size.value, workbook->xls) != record_size.value)
+                   return 0;
+ 
+               memcpy (word16.bytes, workbook->record, 2);
+@@ -2503,9 +2522,9 @@ read_legacy_biff (biff_workbook * workbo
+                   (workbook, swap, record_type.value, record_size.value))
+                   return 0;
+ 
+-              if (fread
+-                  (workbook->record, 1, record_size.value,
+-                   workbook->xls) != record_size.value)
++              if (xls_fread
++                  (sizeof (workbook->record), workbook->record, 1,
++                   record_size.value, workbook->xls) != record_size.value)
+                   return 0;
+ 
+               memcpy (word16.bytes, workbook->record, 2);
+@@ -2586,9 +2605,9 @@ read_legacy_biff (biff_workbook * workbo
+                   (workbook, swap, record_type.value, record_size.value))
+                   return 0;
+ 
+-              if (fread
+-                  (workbook->record, 1, record_size.value,
+-                   workbook->xls) != record_size.value)
++              if (xls_fread
++                  (sizeof (workbook->record), workbook->record, 1,
++                   record_size.value, workbook->xls) != record_size.value)
+                   return 0;
+ 
+               memcpy (word16.bytes, workbook->record, 2);
+@@ -2688,9 +2707,9 @@ read_legacy_biff (biff_workbook * workbo
+                   (workbook, swap, record_type.value, record_size.value))
+                   return 0;
+ 
+-              if (fread
+-                  (workbook->record, 1, record_size.value,
+-                   workbook->xls) != record_size.value)
++              if (xls_fread
++                  (sizeof (workbook->record), workbook->record, 1,
++                   record_size.value, workbook->xls) != record_size.value)
+                   return 0;
+ 
+               memcpy (word16.bytes, workbook->record, 2);
+@@ -3521,8 +3540,9 @@ read_cfbf_sector (biff_workbook * workbo
+     long where = (workbook->current_sector + 1) * workbook->fat->sector_size;
+     if (fseek (workbook->xls, where, SEEK_SET) != 0)
+       return FREEXL_CFBF_SEEK_ERROR;
+-    if (fread (buf, 1, workbook->fat->sector_size, workbook->xls) !=
+-      workbook->fat->sector_size)
++    if (xls_fread
++      (sizeof (biff_workbook), buf, 1, workbook->fat->sector_size,
++       workbook->xls) != workbook->fat->sector_size)
+       return FREEXL_CFBF_READ_ERROR;
+     return FREEXL_OK;
+ }
+@@ -3644,6 +3664,14 @@ read_biff_next_record (biff_workbook * w
+     if (record_type.value == 0x0000 && record_size.value == 0)
+       return -1;
+ 
++/*
++/ Sandro 2017-09-07
++/ fixing a security issue reported by
++/ Cisco [TALOS-2017-430]
++*/
++    if (record_size.value > sizeof (workbook->record))
++      return -1;
++
+ /* saving the current record */
+     workbook->record_type = record_type.value;
+     workbook->record_size = record_size.value;
+@@ -3823,8 +3851,9 @@ get_workbook_stream (biff_workbook * wor
+     if (fseek (workbook->xls, where, SEEK_SET) != 0)
+       return FREEXL_CFBF_SEEK_ERROR;
+ /* reading a FAT Directory block [sector] */
+-    if (fread (dir_block, 1, workbook->fat->sector_size, workbook->xls) !=
+-      workbook->fat->sector_size)
++    if (xls_fread
++      (sizeof (dir_block), dir_block, 1, workbook->fat->sector_size,
++       workbook->xls) != workbook->fat->sector_size)
+       return FREEXL_CFBF_READ_ERROR;
+     workbook_start = 0xFFFFFFFF;
+     for (i_entry = 0; i_entry < max_entries; i_entry++)
diff --git a/debian/patches/series b/debian/patches/series
index d6cf717..c920916 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,3 +1,4 @@
 afl-vulnerabilitities.patch
 32bit-multiplication-overflow.patch
 afl-vulnerabilitities-regression.patch
+CVE-2017-2923_CVE-2017-2924.patch

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-grass/freexl.git

_______________________________________________
Pkg-grass-devel mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-grass-devel

Reply via email to