diff options
author | Peter Breitenlohner <peb@mppmu.mpg.de> | 2012-07-09 11:56:19 +0000 |
---|---|---|
committer | Peter Breitenlohner <peb@mppmu.mpg.de> | 2012-07-09 11:56:19 +0000 |
commit | cf0d9ed59589e57e24a07e48c92969eb5e655acd (patch) | |
tree | 9b3aae7c2bb33de69bb146be7d9a7b3c8b7db9cc /Build | |
parent | 05e50d2756c148a33a3a06a28ae32d677fb05cc1 (diff) |
dvi2tty: Avoid buffer overrun for long pathnames (detected by Ken Brown),
and check all values returned by malloc()
WIN32 MSVC lacks <unistd.h> and requires <malloc.h>
git-svn-id: svn://tug.org/texlive/trunk@26959 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build')
6 files changed, 109 insertions, 6 deletions
diff --git a/Build/source/texk/dvi2tty/dvi2tty-5.3.4-PATCHES/ChangeLog b/Build/source/texk/dvi2tty/dvi2tty-5.3.4-PATCHES/ChangeLog index badddbbbef7..562fde34068 100644 --- a/Build/source/texk/dvi2tty/dvi2tty-5.3.4-PATCHES/ChangeLog +++ b/Build/source/texk/dvi2tty/dvi2tty-5.3.4-PATCHES/ChangeLog @@ -1,3 +1,12 @@ +2012-06-22 Peter Breitenlohner <peb@mppmu.mpg.de> + + * patch-05-win32 (new): WIN32 MSVC lacks <unistd.h> and requires + <malloc.h>. + + * patch-06-malloc (new): Avoid buffer overrun for long pathnames + (detected by Ken Brown <kbrow1i@gmail.com>), + and check all values returned by malloc(). + 2012-04-26 Peter Breitenlohner <peb@mppmu.mpg.de> * patch-04-OpenSolaris: New patch: diff --git a/Build/source/texk/dvi2tty/dvi2tty-5.3.4-PATCHES/patch-05-win32 b/Build/source/texk/dvi2tty/dvi2tty-5.3.4-PATCHES/patch-05-win32 new file mode 100644 index 00000000000..bf51b4889c2 --- /dev/null +++ b/Build/source/texk/dvi2tty/dvi2tty-5.3.4-PATCHES/patch-05-win32 @@ -0,0 +1,12 @@ +diff -ur dvi2tty-5.3.4.orig/dvi2tty.h dvi2tty-5.3.4/dvi2tty.h +--- dvi2tty-5.3.4.orig/dvi2tty.h 2011-11-21 22:28:42.000000000 +0100 ++++ dvi2tty-5.3.4/dvi2tty.h 2012-06-22 09:09:35.000000000 +0200 +@@ -28,7 +28,7 @@ + #include <stdio.h> + #include <string.h> + #include <stdlib.h> +-#if defined(MSDOS) ++#if defined(MSDOS) || (defined(WIN32) && !defined(__MINGW32__)) + # include <malloc.h> + #else + # if !defined(THINK_C) diff --git a/Build/source/texk/dvi2tty/dvi2tty-5.3.4-PATCHES/patch-06-malloc b/Build/source/texk/dvi2tty/dvi2tty-5.3.4-PATCHES/patch-06-malloc new file mode 100644 index 00000000000..6933dc4514b --- /dev/null +++ b/Build/source/texk/dvi2tty/dvi2tty-5.3.4-PATCHES/patch-06-malloc @@ -0,0 +1,70 @@ +diff -ur dvi2tty-5.3.4.orig/disdvi.c dvi2tty-5.3.4/disdvi.c +--- dvi2tty-5.3.4.orig/disdvi.c 2010-11-13 16:31:14.000000000 +0100 ++++ dvi2tty-5.3.4/disdvi.c 2012-06-22 09:12:43.000000000 +0200 +@@ -193,7 +193,10 @@ + if ((i >= 5) && (!strcmp(*argv+i-4, dvi_ext))) + dvi_name = *argv; + else { +- dvi_name = malloc((i+5) * sizeof(char)); ++ if ((dvi_name = malloc((i+5) * sizeof(char))) == NULL) { ++ perror("dvi_name"); ++ exit(1); ++ } + strcpy(dvi_name, *argv); + strcat(dvi_name, dvi_ext); + } +diff -ur dvi2tty-5.3.4.orig/dvi2tty.c dvi2tty-5.3.4/dvi2tty.c +--- dvi2tty-5.3.4.orig/dvi2tty.c 2011-11-21 22:30:24.000000000 +0100 ++++ dvi2tty-5.3.4/dvi2tty.c 2012-06-22 10:12:43.000000000 +0200 +@@ -53,7 +53,6 @@ + + /*------------------ end of customization constants ---------------------*/ + +-#define MAXLEN 100 /* size of char-arrays for strings */ + #if defined(MSDOS) || defined(VMS) || defined(AMIGA) + #define OPTSET "haJweEpPousltvbcANU" /* legal options */ + #define OPTWARG "weEpPovb" /* options with argument */ +@@ -109,7 +108,7 @@ + char * progname; /* our name */ + int Argc; + char ** Argv; +-char DVIfilename[MAXLEN]; ++char * DVIfilename; + const char * OUTfilename; + char optch; /* for option handling */ + +@@ -483,7 +482,10 @@ + int num; + + pageswitchon = TRUE; +- firstpage = (printlisttype *) malloc(sizeof(printlisttype)); ++ if ((firstpage = (printlisttype *) malloc(sizeof(printlisttype))) == NULL) { ++ perror("firstpage"); ++ exit(1); ++ } + firstpage->all = FALSE; + firstpage->nxt = nil; + firstpage->pag = 0; +@@ -543,7 +545,10 @@ + + currentpage = lastpage; + currentpage->pag = pagnr; +- lastpage = (printlisttype *) malloc(sizeof(printlisttype)); ++ if ((lastpage = (printlisttype *) malloc(sizeof(printlisttype))) == NULL) { ++ perror("lastpage"); ++ exit(1); ++ } + lastpage->all = FALSE; + lastpage->nxt = nil; + lastpage->pag = 0; +@@ -566,6 +571,10 @@ + i = strlen(str); + if (i == 0) + usage(ign); ++ if ((DVIfilename = (char *) malloc(i+5)) == NULL) { ++ perror("DVIfilename"); ++ exit(1); ++ } + strcpy(DVIfilename, str); + #ifdef KPATHSEA + if (!kpse_readable_file(DVIfilename)) diff --git a/Build/source/texk/dvi2tty/dvi2tty-5.3.4/disdvi.c b/Build/source/texk/dvi2tty/dvi2tty-5.3.4/disdvi.c index b6c8743384d..43403e0f339 100644 --- a/Build/source/texk/dvi2tty/dvi2tty-5.3.4/disdvi.c +++ b/Build/source/texk/dvi2tty/dvi2tty-5.3.4/disdvi.c @@ -193,7 +193,10 @@ int main(int argc, char **argv) if ((i >= 5) && (!strcmp(*argv+i-4, dvi_ext))) dvi_name = *argv; else { - dvi_name = malloc((i+5) * sizeof(char)); + if ((dvi_name = malloc((i+5) * sizeof(char))) == NULL) { + perror("dvi_name"); + exit(1); + } strcpy(dvi_name, *argv); strcat(dvi_name, dvi_ext); } diff --git a/Build/source/texk/dvi2tty/dvi2tty-5.3.4/dvi2tty.c b/Build/source/texk/dvi2tty/dvi2tty-5.3.4/dvi2tty.c index a77000c5c0a..54eac225c97 100644 --- a/Build/source/texk/dvi2tty/dvi2tty-5.3.4/dvi2tty.c +++ b/Build/source/texk/dvi2tty/dvi2tty-5.3.4/dvi2tty.c @@ -53,7 +53,6 @@ /*------------------ end of customization constants ---------------------*/ -#define MAXLEN 100 /* size of char-arrays for strings */ #if defined(MSDOS) || defined(VMS) || defined(AMIGA) #define OPTSET "haJweEpPousltvbcANU" /* legal options */ #define OPTWARG "weEpPovb" /* options with argument */ @@ -109,7 +108,7 @@ const char * path; /* name of the pager to run */ char * progname; /* our name */ int Argc; char ** Argv; -char DVIfilename[MAXLEN]; +char * DVIfilename; const char * OUTfilename; char optch; /* for option handling */ @@ -483,7 +482,10 @@ void getpages(int j, const char *str) int num; pageswitchon = TRUE; - firstpage = (printlisttype *) malloc(sizeof(printlisttype)); + if ((firstpage = (printlisttype *) malloc(sizeof(printlisttype))) == NULL) { + perror("firstpage"); + exit(1); + } firstpage->all = FALSE; firstpage->nxt = nil; firstpage->pag = 0; @@ -543,7 +545,10 @@ void plcnxt(int pagnr) currentpage = lastpage; currentpage->pag = pagnr; - lastpage = (printlisttype *) malloc(sizeof(printlisttype)); + if ((lastpage = (printlisttype *) malloc(sizeof(printlisttype))) == NULL) { + perror("lastpage"); + exit(1); + } lastpage->all = FALSE; lastpage->nxt = nil; lastpage->pag = 0; @@ -566,6 +571,10 @@ void getfname(const char *str) i = strlen(str); if (i == 0) usage(ign); + if ((DVIfilename = (char *) malloc(i+5)) == NULL) { + perror("DVIfilename"); + exit(1); + } strcpy(DVIfilename, str); #ifdef KPATHSEA if (!kpse_readable_file(DVIfilename)) diff --git a/Build/source/texk/dvi2tty/dvi2tty-5.3.4/dvi2tty.h b/Build/source/texk/dvi2tty/dvi2tty-5.3.4/dvi2tty.h index 924c467c725..21825f95db3 100644 --- a/Build/source/texk/dvi2tty/dvi2tty-5.3.4/dvi2tty.h +++ b/Build/source/texk/dvi2tty/dvi2tty-5.3.4/dvi2tty.h @@ -28,7 +28,7 @@ Copyright (C) 1989-2010 M.J.E. Mol, MESA Consulting B.V." #include <stdio.h> #include <string.h> #include <stdlib.h> -#if defined(MSDOS) +#if defined(MSDOS) || (defined(WIN32) && !defined(__MINGW32__)) # include <malloc.h> #else # if !defined(THINK_C) |