diff -up cups-filters-1.0.35/filter/textcommon.c.CVE-2015-3258-3279 cups-filters-1.0.35/filter/textcommon.c --- cups-filters-1.0.35/filter/textcommon.c.CVE-2015-3258-3279 2013-05-07 19:24:58.000000000 +0100 +++ cups-filters-1.0.35/filter/textcommon.c 2015-07-09 08:16:32.506423028 +0100 @@ -26,6 +26,7 @@ */ #include "textcommon.h" +#include /* @@ -644,6 +645,45 @@ TextMain(const char *name, /* I - Name o if (PrettyPrint) PageTop -= 216.0f / LinesPerInch; + /* + * Allocate memory for the page... + */ + + SizeColumns = (PageRight - PageLeft) / 72.0 * CharsPerInch; + SizeLines = (PageTop - PageBottom) / 72.0 * LinesPerInch; + + /* + * Enforce minimum size... + */ + if (SizeColumns < 1) + SizeColumns = 1; + if (SizeLines < 1) + SizeLines = 1; + + if (SizeLines >= INT_MAX / SizeColumns / sizeof(lchar_t)) + { + fprintf(stderr, "ERROR: bad page size\n"); + exit(1); + } + + Page = calloc(sizeof(lchar_t *), SizeLines); + if (!Page) + { + fprintf(stderr, "ERROR: cannot allocate memory for page\n"); + exit(1); + } + + Page[0] = calloc(sizeof(lchar_t), SizeColumns * SizeLines); + if (!Page[0]) + { + free(Page); + fprintf(stderr, "ERROR: cannot allocate memory for page\n"); + exit(1); + } + + for (i = 1; i < SizeLines; i ++) + Page[i] = Page[0] + i * SizeColumns; + Copies = atoi(argv[4]); WriteProlog(argv[3], argv[2], getenv("CLASSIFICATION"), @@ -1122,6 +1162,8 @@ TextMain(const char *name, /* I - Name o if (ppd != NULL) ppdClose(ppd); + free(Page[0]); + free(Page); return (0); } diff -up cups-filters-1.0.35/filter/texttopdf.c.CVE-2015-3258-3279 cups-filters-1.0.35/filter/texttopdf.c --- cups-filters-1.0.35/filter/texttopdf.c.CVE-2015-3258-3279 2015-07-09 08:16:12.266663237 +0100 +++ cups-filters-1.0.35/filter/texttopdf.c 2015-07-09 08:16:32.506423028 +0100 @@ -172,9 +172,6 @@ WriteEpilogue(void) { "FN","FB","FI" }; int i,j; - free(Page[0]); - free(Page); - // embed fonts for (i = PrettyPrint ? 2 : 1; i >= 0; i --) { for (j = 0; j < NumFonts; j ++) @@ -333,18 +330,6 @@ WriteProlog(const char *title, /* I - T PageTop -= 36; } - /* - * Allocate memory for the page... - */ - - SizeColumns = (PageRight - PageLeft) / 72.0 * CharsPerInch; - SizeLines = (PageTop - PageBottom) / 72.0 * LinesPerInch; - - Page = calloc(sizeof(lchar_t *), SizeLines); - Page[0] = calloc(sizeof(lchar_t), SizeColumns * SizeLines); - for (i = 1; i < SizeLines; i ++) - Page[i] = Page[0] + i * SizeColumns; - if (PageColumns > 1) { ColumnGutter = CharsPerInch / 2;