| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394 |
- Security bugfixes (CAN-2004-1184, CAN-2004-1185, CAN-2004-1186)
- and some additional non-security bugfixes.
- Index: compat/regex.c
- --- compat/regex.c.orig 1998-10-20 15:39:02 +0200
- +++ compat/regex.c 2005-02-05 09:50:45 +0100
- @@ -2400,11 +2400,13 @@
- case ')':
- if (syntax & RE_NO_BK_PARENS) goto normal_backslash;
-
- - if (COMPILE_STACK_EMPTY)
- - if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)
- + if (COMPILE_STACK_EMPTY) {
- + if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD) {
- goto normal_backslash;
- - else
- + } else {
- FREE_STACK_RETURN (REG_ERPAREN);
- + }
- + }
-
- handle_close:
- if (fixup_alt_jump)
- @@ -2420,11 +2422,13 @@
- }
-
- /* See similar code for backslashed left paren above. */
- - if (COMPILE_STACK_EMPTY)
- - if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)
- + if (COMPILE_STACK_EMPTY) {
- + if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD) {
- goto normal_char;
- - else
- + } else {
- FREE_STACK_RETURN (REG_ERPAREN);
- + }
- + }
-
- /* Since we just checked for an empty stack above, this
- ``can't happen''. */
- Index: docs/Makefile.in
- --- docs/Makefile.in.orig 2002-01-24 08:39:44 +0100
- +++ docs/Makefile.in 2005-02-05 09:50:45 +0100
- @@ -284,7 +284,7 @@
- enscript.fns enscript.ky enscript.kys enscript.ps \
- enscript.log enscript.pg enscript.toc enscript.tp \
- enscript.tps enscript.vr enscript.vrs enscript.op enscript.tr \
- - enscript.cv enscript.cn
- + enscript.cv enscript.cn enscript.1 states.1
-
- clean-aminfo:
-
- Index: docs/enscript.man
- --- docs/enscript.man.orig 2000-11-30 07:55:31 +0100
- +++ docs/enscript.man 2005-02-05 09:50:45 +0100
- @@ -118,7 +118,7 @@
- The header string \f2header\f1 can contain the same formatting escapes
- which can be specified for the \f3%Format\f1 directives in the user
- defined fancy headers. For example, the following option prints the
- -file name, current data and page numbers:
- +file name, current date and page numbers:
-
- \f3enscript \-\-header='$n %W Page $% of $=' *.c\f1
-
- Index: lib/enscript-color.hdr
- --- lib/enscript-color.hdr.orig 1998-12-29 09:40:47 +0100
- +++ lib/enscript-color.hdr 2005-02-05 09:50:45 +0100
- @@ -27,8 +27,8 @@
-
- % -- code follows this line --
- %%DocumentNeededResources: font Times-Bold Times-Roman
- -%Format: moddatestr $W
- -%Format: modtimestr $C
- +%Format: moddatestr $D{%x}
- +%Format: modtimestr $D{%X}
- %Format: pagenumstr $%
- %Format: pagecountstr /$=
-
- Index: lib/enscript.hdr
- --- lib/enscript.hdr.orig 1997-03-03 09:20:34 +0100
- +++ lib/enscript.hdr 2005-02-05 09:50:45 +0100
- @@ -25,8 +25,8 @@
-
- % -- code follows this line --
- %%DocumentNeededResources: font Times-Bold Times-Roman
- -%Format: moddatestr $W
- -%Format: modtimestr $C
- +%Format: moddatestr $D{%x}
- +%Format: modtimestr $D{%X}
- %Format: pagenumstr $%
-
- % Fonts.
- Index: src/gsint.h
- --- src/gsint.h.orig 2000-07-11 17:28:06 +0200
- +++ src/gsint.h 2005-02-05 09:50:45 +0100
- @@ -701,4 +701,9 @@
- */
- void printer_close ___P ((void *context));
-
- +/*
- + * Escape filenames for shell usage
- + */
- +char *shell_escape ___P ((const char *fn));
- +
- #endif /* not GSINT_H */
- Index: src/main.c
- --- src/main.c.orig 2002-01-24 08:35:45 +0100
- +++ src/main.c 2005-02-05 09:50:45 +0100
- @@ -973,6 +973,8 @@
- */
- #if HAVE_LC_MESSAGES
- setlocale (LC_MESSAGES, "");
- + setlocale (LC_CTYPE, "");
- + setlocale (LC_TIME, "");
- #endif
- #endif
- #if ENABLE_NLS
- @@ -1546,9 +1548,13 @@
- buffer_append (&cmd, intbuf);
- buffer_append (&cmd, " ");
-
- - buffer_append (&cmd, "-Ddocument_title=\"");
- - buffer_append (&cmd, title);
- - buffer_append (&cmd, "\" ");
- + buffer_append (&cmd, "-Ddocument_title=\'");
- + if ((cp = shell_escape (title)) != NULL)
- + {
- + buffer_append (&cmd, cp);
- + free (cp);
- + }
- + buffer_append (&cmd, "\' ");
-
- buffer_append (&cmd, "-Dtoc=");
- buffer_append (&cmd, toc ? "1" : "0");
- @@ -1565,8 +1571,14 @@
- /* Append input files. */
- for (i = optind; i < argc; i++)
- {
- - buffer_append (&cmd, " ");
- - buffer_append (&cmd, argv[i]);
- + char *cp;
- + if ((cp = shell_escape (argv[i])) != NULL)
- + {
- + buffer_append (&cmd, " \'");
- + buffer_append (&cmd, cp);
- + buffer_append (&cmd, "\'");
- + free (cp);
- + }
- }
-
- /* And do the job. */
- @@ -1627,7 +1639,7 @@
- buffer_ptr (opts), buffer_len (opts));
- }
-
- - buffer_append (&buffer, " \"%s\"");
- + buffer_append (&buffer, " \'%s\'");
-
- input_filter = buffer_copy (&buffer);
- input_filter_stdin = "-";
- Index: src/mkafmmap.c
- --- src/mkafmmap.c.orig 1997-07-03 13:14:59 +0200
- +++ src/mkafmmap.c 2005-02-05 09:50:45 +0100
- @@ -126,6 +126,7 @@
- #if HAVE_SETLOCALE
- #if HAVE_LC_MESSAGES
- setlocale (LC_MESSAGES, "");
- + setlocale (LC_CTYPE, "");
- #endif
- #endif
- #if ENABLE_NLS
- Index: src/psgen.c
- --- src/psgen.c.orig 2002-01-24 08:38:58 +0100
- +++ src/psgen.c 2005-02-05 09:50:45 +0100
- @@ -2034,8 +2034,9 @@
- else
- {
- ftail++;
- - strncpy (buf, fname, ftail - fname);
- - buf[ftail - fname] = '\0';
- + i = ftail - fname >= sizeof (buf)-1 ? sizeof (buf)-1 : ftail - fname;
- + strncpy (buf, fname, i);
- + buf[i] = '\0';
- }
-
- if (nup > 1)
- @@ -2385,9 +2386,10 @@
- MESSAGE (2, (stderr, "^@epsf=\"%s\"\n", token->u.epsf.filename));
-
- i = strlen (token->u.epsf.filename);
- + /*
- if (i > 0 && token->u.epsf.filename[i - 1] == '|')
- {
- - /* Read EPS data from pipe. */
- + / * Read EPS data from pipe. * /
- token->u.epsf.pipe = 1;
- token->u.epsf.filename[i - 1] = '\0';
- token->u.epsf.fp = popen (token->u.epsf.filename, "r");
- @@ -2400,6 +2402,7 @@
- }
- }
- else
- + */
- {
- char *filename;
-
- @@ -2581,7 +2584,7 @@
- read_float (InputStream *is, int units, int horizontal)
- {
- char buf[256];
- - int i, ch;
- + int i, ch = 0;
- double val;
-
- for (i = 0; (i < sizeof (buf) - 1
- Index: src/util.c
- --- src/util.c.orig 1999-09-17 17:26:51 +0200
- +++ src/util.c 2005-02-05 09:59:00 +0100
- @@ -1239,6 +1239,8 @@
-
- /* Create result. */
- cp = xmalloc (len + 1);
- + if (cp == NULL)
- + return NULL;
- for (i = 0, j = 0; string[i]; i++)
- switch (string[i])
- {
- @@ -1879,6 +1881,7 @@
- char *cmd = NULL;
- int cmdlen;
- int i, pos;
- + char *cp;
-
- is->is_pipe = 1;
-
- @@ -1902,12 +1905,16 @@
- {
- case 's':
- /* Expand cmd-buffer. */
- - cmdlen += strlen (fname);
- - cmd = xrealloc (cmd, cmdlen);
- + if ((cp = shell_escape (fname)) != NULL)
- + {
- + cmdlen += strlen (cp);
- + cmd = xrealloc (cmd, cmdlen);
-
- - /* Paste filename. */
- - strcpy (cmd + pos, fname);
- - pos += strlen (fname);
- + /* Paste filename. */
- + strcpy (cmd + pos, cp);
- + pos += strlen (cp);
- + free (cp);
- + }
-
- i++;
- break;
- @@ -1991,12 +1998,13 @@
- if (is->bufpos >= is->data_in_buf)
- {
- /* At the EOF? */
- - if (is->nreads > 0 && is->data_in_buf < sizeof (is->buf))
- + if (is->nreads > 0 && is->data_in_buf < sizeof (is->buf)-1)
- /* Yes. */
- return EOF;
-
- /* Read more data. */
- - is->data_in_buf = fread (is->buf, 1, sizeof (is->buf), is->fp);
- + memset (is->buf, 0, sizeof (is->buf));
- + is->data_in_buf = fread (is->buf, 1, sizeof (is->buf)-1, is->fp);
- is->bufpos = 0;
- is->nreads++;
-
- @@ -2116,3 +2124,36 @@
- {
- return buffer->len;
- }
- +
- +/*
- + * Escapes the name of a file so that the shell groks it in 'single'
- + * quotation marks. The resulting pointer has to be free()ed when not
- + * longer used.
- +*/
- +char *
- +shell_escape(const char *fn)
- +{
- + size_t len = 0;
- + const char *inp;
- + char *retval, *outp;
- +
- + for(inp = fn; *inp; ++inp)
- + switch(*inp)
- + {
- + case '\'': len += 4; break;
- + default: len += 1; break;
- + }
- +
- + outp = retval = malloc(len + 1);
- + if(!outp)
- + return NULL; /* perhaps one should do better error handling here */
- + for(inp = fn; *inp; ++inp)
- + switch(*inp)
- + {
- + case '\'': *outp++ = '\''; *outp++ = '\\'; *outp++ = '\'', *outp++ = '\''; break;
- + default: *outp++ = *inp; break;
- + }
- + *outp = 0;
- +
- + return retval;
- +}
- Index: states/main.c
- --- states/main.c.orig 2000-11-30 07:40:17 +0100
- +++ states/main.c 2005-02-05 09:50:45 +0100
- @@ -202,6 +202,7 @@
- #if HAVE_SETLOCALE
- #if HAVE_LC_MESSAGES
- setlocale (LC_MESSAGES, "");
- + setlocale (LC_CTYPE, "");
- #endif
- #endif
- #if ENABLE_NLS
- Index: states/over.in
- --- states/over.in.orig 1997-03-19 11:24:49 +0100
- +++ states/over.in 2005-02-05 09:50:45 +0100
- @@ -2,4 +2,4 @@
-
- librarydir=@LIBRARYDIR@
-
- -enscript -E -p- --quiet --language=overstrike $* 2>&1 | less
- +enscript -E -p- --quiet --language=overstrike "$@" 2>&1 | sensible-pager
- Index: afm/Makefile.in
- --- afm/Makefile.in.orig 2002-01-24 08:39:24 +0100
- +++ afm/Makefile.in 2005-02-05 10:04:31 +0100
- @@ -227,10 +227,10 @@
-
-
- install-data-local:
- - $(top_srcdir)/mkinstalldirs $(datadir)/enscript
- - $(top_srcdir)/mkinstalldirs $(datadir)/enscript/afm
- + $(top_srcdir)/mkinstalldirs $(DESTDIR)$(datadir)/enscript
- + $(top_srcdir)/mkinstalldirs $(DESTDIR)$(datadir)/enscript/afm
- for f in $(EXTRA_DIST); do \
- - $(INSTALL_DATA) $(srcdir)/$$f $(datadir)/enscript/afm/$$f; \
- + $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(datadir)/enscript/afm/$$f; \
- done
-
- uninstall-local:
- Index: lib/Makefile.in
- --- lib/Makefile.in.orig 2002-01-24 08:39:27 +0100
- +++ lib/Makefile.in 2005-02-05 10:07:31 +0100
- @@ -254,15 +254,15 @@
- all-local: enscript.cfg
-
- install-data-local: enscript.cfg
- - $(top_srcdir)/mkinstalldirs $(sysconfdir)
- - if test -r $(sysconfdir)/enscript.cfg; then \
- - cp $(sysconfdir)/enscript.cfg $(sysconfdir)/enscript.cfg.old; \
- + $(top_srcdir)/mkinstalldirs $(DESTDIR)$(sysconfdir)
- + if test -r $(DESTDIR)$(sysconfdir)/enscript.cfg; then \
- + cp $(DESTDIR)$(sysconfdir)/enscript.cfg $(DESTDIR)$(sysconfdir)/enscript.cfg.old; \
- else :; \
- fi
- - $(INSTALL_DATA) enscript.cfg $(sysconfdir)/enscript.cfg
- + $(INSTALL_DATA) enscript.cfg $(DESTDIR)$(sysconfdir)/enscript.cfg
-
- uninstall-local:
- - rm -f $(sysconfdir)/enscript.cfg
- + rm -f $(DESTDIR)$(sysconfdir)/enscript.cfg
-
- enscript.cfg: $(srcdir)/enscript.cfg.in Makefile
- sed 's%@DATADIR@%$(datadir)%g; s%@media@%@MEDIA@%g; s%@BINDIR@%$(bindir)%g; s%@spooler@%@SPOOLER@%g; s%@pslevel@%@PSLEVEL@%g; s%@queueparam@%@QUEUEPARAM@%g' \
- Index: states/hl/Makefile.in
- --- states/hl/Makefile.in.orig 2002-01-24 08:39:40 +0100
- +++ states/hl/Makefile.in 2005-02-05 14:17:13 +0100
- @@ -234,14 +234,14 @@
-
-
- install-data-local:
- - $(top_srcdir)/mkinstalldirs $(datadir)/enscript
- - $(top_srcdir)/mkinstalldirs $(datadir)/enscript/hl
- + $(top_srcdir)/mkinstalldirs $(DESTDIR)$(datadir)/enscript
- + $(top_srcdir)/mkinstalldirs $(DESTDIR)$(datadir)/enscript/hl
- for f in $(states); do \
- - $(INSTALL_DATA) $(srcdir)/$$f $(datadir)/enscript/hl/$$f; \
- + $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(datadir)/enscript/hl/$$f; \
- done
-
- uninstall-local:
- - rm -rf $(datadir)/enscript/hl
- + rm -rf $(DESTDIR)$(datadir)/enscript/hl
-
- # Tell versions [3.59,3.63) of GNU make to not export all variables.
- # Otherwise a system limit (for SysV at least) may be exceeded.
|