From d25e43cfbe8fa4664e7f5f8fb9ca248a575f03e9 Mon Sep 17 00:00:00 2001
From: msweet
Date: Fri, 15 May 2015 19:16:58 +0000
Subject: [PATCH] The ppdhtml and ppdpo utilities crashed when the -D option
was used before a driver information file (STR #4627)
git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/trunk@12633 a1ca3aef-8c08-0410-bb20-df032aa958be
---
CHANGES-2.0.txt | 2 +
ppdc/ppdhtml.cxx | 145 ++++++++++++++++++++++++-----------------------
ppdc/ppdpo.cxx | 59 +++++++++----------
3 files changed, 104 insertions(+), 102 deletions(-)
diff --git a/CHANGES-2.0.txt b/CHANGES-2.0.txt
index 01326f19d..6e5db56c3 100644
--- a/CHANGES-2.0.txt
+++ b/CHANGES-2.0.txt
@@ -21,6 +21,8 @@ CHANGES IN CUPS V2.0.3
- The sample Epson driver could crash (STR #4616)
- The IPP backend now correctly monitors jobs
()
+ - The ppdhtml and ppdpo utilities crashed when the -D option was used
+ before a driver information file (STR #4627)
- Added Russian translation (STR #4577)
diff --git a/ppdc/ppdhtml.cxx b/ppdc/ppdhtml.cxx
index d5678898d..881187636 100644
--- a/ppdc/ppdhtml.cxx
+++ b/ppdc/ppdhtml.cxx
@@ -1,21 +1,16 @@
//
// "$Id$"
//
-// PPD to HTML utility for the CUPS PPD Compiler.
+// PPD to HTML utility for the CUPS PPD Compiler.
//
-// Copyright 2007-2011 by Apple Inc.
-// Copyright 2002-2005 by Easy Software Products.
+// Copyright 2007-2015 by Apple Inc.
+// Copyright 2002-2005 by Easy Software Products.
//
-// These coded instructions, statements, and computer programs are the
-// property of Apple Inc. and are protected by Federal copyright
-// law. Distribution and use rights are outlined in the file "LICENSE.txt"
-// which should have been included with this file. If this file is
-// file is missing or damaged, see the license at "http://www.cups.org/".
-//
-// Contents:
-//
-// main() - Main entry for the PPD to HTML utility.
-// usage() - Show usage and exit.
+// These coded instructions, statements, and computer programs are the
+// property of Apple Inc. and are protected by Federal copyright
+// law. Distribution and use rights are outlined in the file "LICENSE.txt"
+// which should have been included with this file. If this file is
+// file is missing or damaged, see the license at "http://www.cups.org/".
//
//
@@ -58,7 +53,7 @@ main(int argc, // I - Number of command-line arguments
_cupsSetLocale(argv);
// Scan the command-line...
- src = 0;
+ src = new ppdcSource();
for (i = 1; i < argc; i ++)
if (argv[i][0] == '-')
@@ -97,65 +92,75 @@ main(int argc, // I - Number of command-line arguments
else
{
// Open and load the driver info file...
- src = new ppdcSource(argv[i]);
-
- // Create a composite group with all of the features from the
- // drivers in the info file...
- composite = new ppdcGroup("", "");
-
- for (d = (ppdcDriver *)src->drivers->first(); d; d = (ppdcDriver *)src->drivers->next())
- for (g = (ppdcGroup *)d->groups->first(); g; g = (ppdcGroup *)d->groups->next())
- for (o = (ppdcOption *)g->options->first(); o; o = (ppdcOption *)g->options->next())
- {
- if ((compo = composite->find_option(o->name->value)) == NULL)
- composite->add_option(new ppdcOption(o));
- }
-
- puts("");
- printf("Driver Summary for %s\n", argv[i]);
- printf("Driver Summary for %s
\n", argv[i]);
- printf("Printer | Media Size | ");
- for (compo = (ppdcOption *)composite->options->first(); compo; compo = (ppdcOption *)composite->options->next())
- printf("%s | ", compo->text->value);
- puts("
");
-
- // Write HTML summary...
- for (d = (ppdcDriver *)src->drivers->first(); d; d = (ppdcDriver *)src->drivers->next())
- {
- // Write the summary for this driver...
- printf("%s | ", d->model_name->value);
- for (size = (ppdcMediaSize *)d->sizes->first(); size;
- size = (ppdcMediaSize *)d->sizes->next())
- printf("%s ", size->text->value);
- printf(" | ");
-
- for (compo = (ppdcOption *)composite->options->first(); compo;
- compo = (ppdcOption *)composite->options->next())
- if ((o = d->find_option(compo->name->value)) != NULL)
- {
- printf("");
- for (c = (ppdcChoice *)o->choices->first(); c;
- c = (ppdcChoice *)o->choices->next())
- printf("%s ", c->text->value);
- printf(" | ");
- }
- else
- printf("N/A | ");
-
- puts("
");
- }
-
- puts("
");
- puts("");
- puts("");
- // Delete the printer driver information...
- composite->release();
- src->release();
+ src->read_file(argv[i]);
+ }
+
+ if ((d = (ppdcDriver *)src->drivers->first()) != NULL)
+ {
+ // Create a composite group with all of the features from the
+ // drivers in the info file...
+ composite = new ppdcGroup("", "");
+
+ while (d != NULL)
+ {
+ for (g = (ppdcGroup *)d->groups->first(); g; g = (ppdcGroup *)d->groups->next())
+ for (o = (ppdcOption *)g->options->first(); o; o = (ppdcOption *)g->options->next())
+ {
+ if ((compo = composite->find_option(o->name->value)) == NULL)
+ composite->add_option(new ppdcOption(o));
+ }
+
+ d = (ppdcDriver *)src->drivers->next();
}
- // If no drivers have been loaded, display the program usage message.
- if (!src)
+ puts("");
+ printf("Driver Summary for %s\n", argv[i]);
+ printf("Driver Summary for %s
\n", argv[i]);
+ printf("Printer | Media Size | ");
+ for (compo = (ppdcOption *)composite->options->first(); compo; compo = (ppdcOption *)composite->options->next())
+ printf("%s | ", compo->text->value);
+ puts("
");
+
+ // Write HTML summary...
+ for (d = (ppdcDriver *)src->drivers->first(); d; d = (ppdcDriver *)src->drivers->next())
+ {
+ // Write the summary for this driver...
+ printf("%s | ", d->model_name->value);
+ for (size = (ppdcMediaSize *)d->sizes->first(); size;
+ size = (ppdcMediaSize *)d->sizes->next())
+ printf("%s ", size->text->value);
+ printf(" | ");
+
+ for (compo = (ppdcOption *)composite->options->first(); compo;
+ compo = (ppdcOption *)composite->options->next())
+ if ((o = d->find_option(compo->name->value)) != NULL)
+ {
+ printf("");
+ for (c = (ppdcChoice *)o->choices->first(); c;
+ c = (ppdcChoice *)o->choices->next())
+ printf("%s ", c->text->value);
+ printf(" | ");
+ }
+ else
+ printf("N/A | ");
+
+ puts("
");
+ }
+
+ puts("
");
+ puts("");
+ puts("");
+
+ // Delete the printer driver information...
+ composite->release();
+ }
+ else
+ {
+ // If no drivers have been loaded, display the program usage message.
usage();
+ }
+
+ src->release();
// Return with no errors.
return (0);
diff --git a/ppdc/ppdpo.cxx b/ppdc/ppdpo.cxx
index 01513fd55..132d4593e 100644
--- a/ppdc/ppdpo.cxx
+++ b/ppdc/ppdpo.cxx
@@ -1,22 +1,16 @@
//
// "$Id$"
//
-// PPD file message catalog program for the CUPS PPD Compiler.
+// PPD file message catalog program for the CUPS PPD Compiler.
//
-// Copyright 2007-2012 by Apple Inc.
-// Copyright 2002-2005 by Easy Software Products.
+// Copyright 2007-2015 by Apple Inc.
+// Copyright 2002-2005 by Easy Software Products.
//
-// These coded instructions, statements, and computer programs are the
-// property of Apple Inc. and are protected by Federal copyright
-// law. Distribution and use rights are outlined in the file "LICENSE.txt"
-// which should have been included with this file. If this file is
-// file is missing or damaged, see the license at "http://www.cups.org/".
-//
-// Contents:
-//
-// main() - Main entry for the PPD compiler.
-// add_ui_strings() - Add all UI strings from the driver.
-// usage() - Show usage and exit.
+// These coded instructions, statements, and computer programs are the
+// property of Apple Inc. and are protected by Federal copyright
+// law. Distribution and use rights are outlined in the file "LICENSE.txt"
+// which should have been included with this file. If this file is
+// file is missing or damaged, see the license at "http://www.cups.org/".
//
//
@@ -58,7 +52,7 @@ main(int argc, // I - Number of command-line arguments
// Scan the command-line...
catalog = new ppdcCatalog("en");
- src = 0;
+ src = new ppdcSource();
verbose = 0;
outfile = 0;
@@ -123,23 +117,28 @@ main(int argc, // I - Number of command-line arguments
_("ppdc: Loading driver information file \"%s\"."),
argv[i]);
- src = new ppdcSource(argv[i]);
+ src->read_file(argv[i]);
+ }
- // Add UI strings...
- for (d = (ppdcDriver *)src->drivers->first();
- d;
- d = (ppdcDriver *)src->drivers->next())
- {
- if (verbose)
- _cupsLangPrintf(stderr, _("ppdc: Adding/updating UI text from %s."),
- argv[i]);
+ // If no drivers have been loaded, display the program usage message.
+ if ((d = (ppdcDriver *)src->drivers->first()) != NULL)
+ {
+ // Add UI strings...
+ while (d != NULL)
+ {
+ if (verbose)
+ _cupsLangPrintf(stderr, _("ppdc: Adding/updating UI text from %s."), argv[i]);
- add_ui_strings(d, catalog);
- }
+ add_ui_strings(d, catalog);
- // Delete the printer driver information...
- src->release();
+ d = (ppdcDriver *)src->drivers->next();
}
+ }
+ else
+ usage();
+
+ // Delete the printer driver information...
+ src->release();
// Write the message catalog...
if (!outfile)
@@ -149,10 +148,6 @@ main(int argc, // I - Number of command-line arguments
catalog->release();
- // If no drivers have been loaded, display the program usage message.
- if (!src)
- usage();
-
// Return with no errors.
return (0);
}
--
2.39.5