]> 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:42:27 +0000 (13:42 -0500)
committerMichael R Sweet <michael.r.sweet@gmail.com>
Mon, 21 Jan 2019 18:42:27 +0000 (13:42 -0500)
This also eliminates a potential memory leak...

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

index f83a90e75d597e592b4481cc8a0b05d78cc93a2e..0d39f6a644d60e07b3aedf859b6440d8159d82ea 100644 (file)
@@ -8,6 +8,7 @@ Changes in CUPS v2.3b8
 - Fixed a potential crash bug in cups-driverd (rdar://46625579)
 - Fixed a performance regression with large PPDs (rdar://47040759)
 - 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 3d3e063e8155e422a90b119f11cbadda31d296b0..4560d9cfcba6436f3b2890152481f280ceb75bf1 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.
  *
  * Licensed under Apache License v2.0.  See the file "LICENSE" for more
  * information.
@@ -106,7 +106,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 */
@@ -133,21 +132,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...
   */
@@ -432,7 +416,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 */
@@ -450,7 +433,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 */
@@ -1192,60 +1174,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 12b57ca30137f62425475507a9cee65d5236246b..108f20e2a1b22047ea97876a4e034c9781ba92a7 100644 (file)
@@ -4,7 +4,7 @@
  * THESE APIS ARE DEPRECATED.  THIS HEADER AND THESE FUNCTIONS WILL BE REMOVED
  * IN A FUTURE RELEASE OF CUPS.
  *
- * Copyright © 2007-2018 by Apple Inc.
+ * Copyright © 2007-2019 by Apple Inc.
  * Copyright © 1997-2007 by Easy Software Products, all rights reserved.
  *
  * Licensed under Apache License v2.0.  See the file "LICENSE" for more
@@ -295,8 +295,8 @@ typedef struct ppd_file_s           /**** PPD File @deprecated@ ****/
   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 */