]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Stop parsing the Emulators keywords in PPD files (Issue #5475)
authorMichael R Sweet <michael.r.sweet@gmail.com>
Mon, 21 Jan 2019 18:44:43 +0000 (13:44 -0500)
committerMichael R Sweet <michael.r.sweet@gmail.com>
Mon, 21 Jan 2019 18:44:43 +0000 (13:44 -0500)
This also addresses a potential memory leak...

CHANGES.md
cups/ppd.c
cups/ppd.h

index a49bc3d7dee3b357d5d8488941c8361214c25258..133d5eb05e66d7144b6b67831416f4ee4cc10f3e 100644 (file)
@@ -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
index 5f27484aa615d69336492caac95f83b45f0f4aaa..968ea8bf357912a5eaff7ba9259921498fffc012 100644 (file)
@@ -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"))
     {
      /*
index 6e628cb60ebbd66c1ea9a6e1ee628f8a075c24d2..ae63c0d666c78145c6dfe5daf5006cb7309d2ddb 100644 (file)
@@ -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 */