123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- From 06d1b08aef94984256cad3c5a54cedb10295681f Mon Sep 17 00:00:00 2001
- From: Jakub Martisko <jamartis@redhat.com>
- Date: Thu, 8 Nov 2018 09:31:18 +0100
- Subject: [PATCH] Possible unterminated string fix
- ---
- unix/unix.c | 4 +++-
- unix/unxcfg.h | 2 +-
- unzip.c | 12 ++++++++----
- zipinfo.c | 12 ++++++++----
- 4 files changed, 20 insertions(+), 10 deletions(-)
- diff --git a/unix/unix.c b/unix/unix.c
- index 59b622d..cd57f80 100644
- --- a/unix/unix.c
- +++ b/unix/unix.c
- @@ -1945,7 +1945,9 @@ void init_conversion_charsets()
- for(i = 0; i < sizeof(dos_charset_map)/sizeof(CHARSET_MAP); i++)
- if(!strcasecmp(local_charset, dos_charset_map[i].local_charset)) {
- strncpy(OEM_CP, dos_charset_map[i].archive_charset,
- - sizeof(OEM_CP));
- + MAX_CP_NAME - 1);
- +
- + OEM_CP[MAX_CP_NAME - 1] = '\0';
- break;
- }
- }
- diff --git a/unix/unxcfg.h b/unix/unxcfg.h
- index 8729de2..9ee8cfe 100644
- --- a/unix/unxcfg.h
- +++ b/unix/unxcfg.h
- @@ -228,7 +228,7 @@ typedef struct stat z_stat;
- /* and notfirstcall are used by do_wild(). */
-
-
- -#define MAX_CP_NAME 25
- +#define MAX_CP_NAME 25 + 1
-
- #ifdef SETLOCALE
- # undef SETLOCALE
- diff --git a/unzip.c b/unzip.c
- index 2d94a38..a485f2b 100644
- --- a/unzip.c
- +++ b/unzip.c
- @@ -1561,7 +1561,8 @@ int uz_opts(__G__ pargc, pargv)
- "error: a valid character encoding should follow the -I argument"));
- return(PK_PARAM);
- }
- - strncpy(ISO_CP, s, sizeof(ISO_CP));
- + strncpy(ISO_CP, s, MAX_CP_NAME - 1);
- + ISO_CP[MAX_CP_NAME - 1] = '\0';
- } else { /* -I charset */
- ++argv;
- if(!(--argc > 0 && *argv != NULL && **argv != '-')) {
- @@ -1570,7 +1571,8 @@ int uz_opts(__G__ pargc, pargv)
- return(PK_PARAM);
- }
- s = *argv;
- - strncpy(ISO_CP, s, sizeof(ISO_CP));
- + strncpy(ISO_CP, s, MAX_CP_NAME - 1);
- + ISO_CP[MAX_CP_NAME - 1] = '\0';
- }
- while(*(++s)); /* No params straight after charset name */
- }
- @@ -1665,7 +1667,8 @@ int uz_opts(__G__ pargc, pargv)
- "error: a valid character encoding should follow the -I argument"));
- return(PK_PARAM);
- }
- - strncpy(OEM_CP, s, sizeof(OEM_CP));
- + strncpy(OEM_CP, s, MAX_CP_NAME - 1);
- + OEM_CP[MAX_CP_NAME - 1] = '\0';
- } else { /* -O charset */
- ++argv;
- if(!(--argc > 0 && *argv != NULL && **argv != '-')) {
- @@ -1674,7 +1677,8 @@ int uz_opts(__G__ pargc, pargv)
- return(PK_PARAM);
- }
- s = *argv;
- - strncpy(OEM_CP, s, sizeof(OEM_CP));
- + strncpy(OEM_CP, s, MAX_CP_NAME - 1);
- + OEM_CP[MAX_CP_NAME - 1] = '\0';
- }
- while(*(++s)); /* No params straight after charset name */
- }
- diff --git a/zipinfo.c b/zipinfo.c
- index accca2a..cb7e08d 100644
- --- a/zipinfo.c
- +++ b/zipinfo.c
- @@ -519,7 +519,8 @@ int zi_opts(__G__ pargc, pargv)
- "error: a valid character encoding should follow the -I argument"));
- return(PK_PARAM);
- }
- - strncpy(ISO_CP, s, sizeof(ISO_CP));
- + strncpy(ISO_CP, s, MAX_CP_NAME - 1);
- + ISO_CP[MAX_CP_NAME - 1] = '\0';
- } else { /* -I charset */
- ++argv;
- if(!(--argc > 0 && *argv != NULL && **argv != '-')) {
- @@ -528,7 +529,8 @@ int zi_opts(__G__ pargc, pargv)
- return(PK_PARAM);
- }
- s = *argv;
- - strncpy(ISO_CP, s, sizeof(ISO_CP));
- + strncpy(ISO_CP, s, MAX_CP_NAME - 1);
- + ISO_CP[MAX_CP_NAME - 1] = '\0';
- }
- while(*(++s)); /* No params straight after charset name */
- }
- @@ -568,7 +570,8 @@ int zi_opts(__G__ pargc, pargv)
- "error: a valid character encoding should follow the -I argument"));
- return(PK_PARAM);
- }
- - strncpy(OEM_CP, s, sizeof(OEM_CP));
- + strncpy(OEM_CP, s, MAX_CP_NAME - 1);
- + OEM_CP[MAX_CP_NAME - 1] = '\0';
- } else { /* -O charset */
- ++argv;
- if(!(--argc > 0 && *argv != NULL && **argv != '-')) {
- @@ -577,7 +580,8 @@ int zi_opts(__G__ pargc, pargv)
- return(PK_PARAM);
- }
- s = *argv;
- - strncpy(OEM_CP, s, sizeof(OEM_CP));
- + strncpy(OEM_CP, s, MAX_CP_NAME - 1);
- + OEM_CP[MAX_CP_NAME - 1] = '\0';
- }
- while(*(++s)); /* No params straight after charset name */
- }
- --
- 2.14.5
|