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("

"); - for (compo = (ppdcOption *)composite->options->first(); compo; compo = (ppdcOption *)composite->options->next()) - printf("", 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(""); - - for (compo = (ppdcOption *)composite->options->first(); compo; - compo = (ppdcOption *)composite->options->next()) - if ((o = d->find_option(compo->name->value)) != NULL) - { - printf(""); - } - else - printf(""); - - puts(""); - } - - puts("
PrinterMedia Size%s
%s", d->model_name->value); - for (size = (ppdcMediaSize *)d->sizes->first(); size; - size = (ppdcMediaSize *)d->sizes->next()) - printf("%s
", size->text->value); - printf("
"); - for (c = (ppdcChoice *)o->choices->first(); c; - c = (ppdcChoice *)o->choices->next()) - printf("%s
", c->text->value); - printf("
N/A

"); - 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("

"); + for (compo = (ppdcOption *)composite->options->first(); compo; compo = (ppdcOption *)composite->options->next()) + printf("", 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(""); + + for (compo = (ppdcOption *)composite->options->first(); compo; + compo = (ppdcOption *)composite->options->next()) + if ((o = d->find_option(compo->name->value)) != NULL) + { + printf(""); + } + else + printf(""); + + puts(""); + } + + puts("
PrinterMedia Size%s
%s", d->model_name->value); + for (size = (ppdcMediaSize *)d->sizes->first(); size; + size = (ppdcMediaSize *)d->sizes->next()) + printf("%s
", size->text->value); + printf("
"); + for (c = (ppdcChoice *)o->choices->first(); c; + c = (ppdcChoice *)o->choices->next()) + printf("%s
", c->text->value); + printf("
N/A

"); + 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