From: Michael R Sweet Date: Mon, 21 Jan 2019 18:44:43 +0000 (-0500) Subject: Stop parsing the Emulators keywords in PPD files (Issue #5475) X-Git-Tag: v2.2.11~23 X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fcups.git;a=commitdiff_plain;h=558bba72feccba755135e140c350bb34ec20986c Stop parsing the Emulators keywords in PPD files (Issue #5475) This also addresses a potential memory leak... --- diff --git a/CHANGES.md b/CHANGES.md index a49bc3d7d..133d5eb05 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -8,6 +8,7 @@ Changes in CUPS v2.2.11 - Running ppdmerge with the same input and output filenames did not work as advertised (Issue #5455) - Fixed a potential memory leak when reading at the end of a file (Issue #5473) +- Fixed a potential memory leak when loading a PPD file (Issue #5475) - Added a USB quirks rule for the Lexmark E120n (Issue #5478) - Fixed a compile error on Linux (Issue #5483) - The lpadmin command, web interface, and scheduler all queried an IPP diff --git a/cups/ppd.c b/cups/ppd.c index 5f27484aa..968ea8bf3 100644 --- a/cups/ppd.c +++ b/cups/ppd.c @@ -1,8 +1,8 @@ /* * PPD file routines for CUPS. * - * Copyright 2007-2018 by Apple Inc. - * Copyright 1997-2007 by Easy Software Products, all rights reserved. + * Copyright © 2007-2019 by Apple Inc. + * Copyright © 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. and are protected by Federal copyright @@ -117,7 +117,6 @@ void ppdClose(ppd_file_t *ppd) /* I - PPD file record */ { int i; /* Looping var */ - ppd_emul_t *emul; /* Current emulation */ ppd_group_t *group; /* Current group */ char **font; /* Current font */ ppd_attr_t **attr; /* Current attribute */ @@ -144,21 +143,6 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */ _cupsStrFree(ppd->jcl_end); _cupsStrFree(ppd->jcl_ps); - /* - * Free any emulations... - */ - - if (ppd->num_emulations > 0) - { - for (i = ppd->num_emulations, emul = ppd->emulations; i > 0; i --, emul ++) - { - _cupsStrFree(emul->start); - _cupsStrFree(emul->stop); - } - - ppd_free(ppd->emulations); - } - /* * Free any UI groups, subgroups, and options... */ @@ -443,7 +427,6 @@ _ppdOpen( _ppd_localization_t localization) /* I - Localization to load */ { int i, j, k; /* Looping vars */ - int count; /* Temporary count */ _ppd_line_t line; /* Line buffer */ ppd_file_t *ppd; /* PPD file record */ ppd_group_t *group, /* Current group */ @@ -461,7 +444,6 @@ _ppdOpen( /* Human-readable text from file */ *string, /* Code/text from file */ *sptr, /* Pointer into string */ - *nameptr, /* Pointer into name */ *temp, /* Temporary string pointer */ **tempfonts; /* Temporary fonts pointer */ float order; /* Order dependency number */ @@ -1203,60 +1185,6 @@ _ppdOpen( else if (!strcmp(string, "Plus90")) ppd->landscape = 90; } - else if (!strcmp(keyword, "Emulators") && string) - { - for (count = 1, sptr = string; sptr != NULL;) - if ((sptr = strchr(sptr, ' ')) != NULL) - { - count ++; - while (*sptr == ' ') - sptr ++; - } - - ppd->num_emulations = count; - if ((ppd->emulations = calloc((size_t)count, sizeof(ppd_emul_t))) == NULL) - { - pg->ppd_status = PPD_ALLOC_ERROR; - - goto error; - } - - for (i = 0, sptr = string; i < count; i ++) - { - for (nameptr = ppd->emulations[i].name; - *sptr != '\0' && *sptr != ' '; - sptr ++) - if (nameptr < (ppd->emulations[i].name + sizeof(ppd->emulations[i].name) - 1)) - *nameptr++ = *sptr; - - *nameptr = '\0'; - - while (*sptr == ' ') - sptr ++; - } - } - else if (!strncmp(keyword, "StartEmulator_", 14)) - { - ppd_decode(string); - - for (i = 0; i < ppd->num_emulations; i ++) - if (!strcmp(keyword + 14, ppd->emulations[i].name)) - { - ppd->emulations[i].start = string; - string = NULL; - } - } - else if (!strncmp(keyword, "StopEmulator_", 13)) - { - ppd_decode(string); - - for (i = 0; i < ppd->num_emulations; i ++) - if (!strcmp(keyword + 13, ppd->emulations[i].name)) - { - ppd->emulations[i].stop = string; - string = NULL; - } - } else if (!strcmp(keyword, "JobPatchFile")) { /* diff --git a/cups/ppd.h b/cups/ppd.h index 6e628cb60..ae63c0d66 100644 --- a/cups/ppd.h +++ b/cups/ppd.h @@ -5,8 +5,8 @@ * -D_PPD_DEPRECATED="" TO YOUR COMPILE OPTIONS. THIS HEADER AND THESE * FUNCTIONS WILL BE REMOVED IN A FUTURE RELEASE OF CUPS. * - * Copyright 2007-2015 by Apple Inc. - * Copyright 1997-2007 by Easy Software Products, all rights reserved. + * Copyright © 2007-2019 by Apple Inc. + * Copyright © 1997-2007 by Easy Software Products, all rights reserved. * * These coded instructions, statements, and computer programs are the * property of Apple Inc. and are protected by Federal copyright @@ -304,8 +304,8 @@ typedef struct ppd_file_s /**** PPD File ****/ int throughput; /* Pages per minute */ ppd_cs_t colorspace; /* Default colorspace */ char *patches; /* Patch commands to be sent to printer */ - int num_emulations; /* Number of emulations supported */ - ppd_emul_t *emulations; /* Emulations and the code to invoke them */ + int num_emulations; /* Number of emulations supported (no longer supported) @private@ */ + ppd_emul_t *emulations; /* Emulations and the code to invoke them (no longer supported) @private@ */ char *jcl_begin; /* Start JCL commands */ char *jcl_ps; /* Enter PostScript interpreter */ char *jcl_end; /* End JCL commands */