From: Michael R Sweet Date: Mon, 10 Nov 2025 22:52:01 +0000 (-0500) Subject: Don't error out when scanning for PPDs (Issue #1416) X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fc35c0c2c0cdf0a6024568437f6dc18c6772902f;p=thirdparty%2Fcups.git Don't error out when scanning for PPDs (Issue #1416) --- diff --git a/CHANGES.md b/CHANGES.md index 0c968cbc81..41d1baf410 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -154,6 +154,7 @@ Changes in CUPS v2.5b1 (YYYY-MM-DD) - Fixed unreachable block in IPP backend (Issue #1351) - Fixed memory leak in _cupsConvertOptions (Issue #1354) - Fixed missing write check in `cupsFileOpen/Fd` (Issue #1360) +- Fixed error recovery when scanning for PPDs in `cups-driverd` (Issue #1416) - Removed hash support for SHA2-512-224 and SHA2-512-256. - Removed `mantohtml` script for generating html pages (use `https://www.msweet.org/mantohtml/`) diff --git a/scheduler/cups-driverd.cxx b/scheduler/cups-driverd.cxx index 0d0f1f1e23..28e37e089d 100644 --- a/scheduler/cups-driverd.cxx +++ b/scheduler/cups-driverd.cxx @@ -5,7 +5,7 @@ // created from driver information files, and dynamically generated PPD files // using driver helper programs. // -// Copyright © 2020-2024 by OpenPrinting. +// Copyright © 2020-2025 by OpenPrinting. // Copyright © 2007-2019 by Apple Inc. // Copyright © 1997-2007 by Easy Software Products. // @@ -156,7 +156,7 @@ static void list_ppds(int request_id, int limit, const char *opt) _CUPS_NORETUR static int load_drivers(cups_array_t *include, cups_array_t *exclude); static int load_drv(const char *filename, const char *name, cups_file_t *fp, time_t mtime, off_t size); static void load_ppd(const char *filename, const char *name, const char *scheme, struct stat *fileinfo, ppd_info_t *ppd, cups_file_t *fp, off_t end); -static int load_ppds(const char *d, const char *p, int descend); +static void load_ppds(const char *d, const char *p, int descend); static void load_ppds_dat(char *filename, size_t filesize, int verbose); static int load_tar(const char *filename, const char *name, cups_file_t *fp, time_t mtime, off_t size); static int read_tar(cups_file_t *fp, char *name, size_t namesize, struct stat *info); @@ -2352,7 +2352,7 @@ load_ppd(const char *filename, // I - Real filename // 'load_ppds()' - Load PPD files recursively. // -static int // O - 1 on success, 0 on failure +static void load_ppds(const char *d, // I - Actual directory const char *p, // I - Virtual path in name int descend) // I - Descend into directories? @@ -2380,13 +2380,13 @@ load_ppds(const char *d, // I - Actual directory fprintf(stderr, "ERROR: [cups-driverd] Unable to stat \"%s\": %s\n", d, strerror(errno)); - return (0); + return; } else if (cupsArrayFind(Inodes, &dinfo)) { fprintf(stderr, "ERROR: [cups-driverd] Skipping \"%s\": loop detected!\n", d); - return (1); + return; } /* @@ -2408,7 +2408,7 @@ load_ppds(const char *d, // I - Actual directory if (_cupsFileCheck(d, _CUPS_FILE_CHECK_DIRECTORY, !geteuid(), _cupsFileCheckFilter, NULL)) - return (0); + return; if ((dir = cupsDirOpen(d)) == NULL) { @@ -2417,7 +2417,7 @@ load_ppds(const char *d, // I - Actual directory "ERROR: [cups-driverd] Unable to open PPD directory \"%s\": %s\n", d, strerror(errno)); - return (0); + return; } fprintf(stderr, "DEBUG: [cups-driverd] Loading \"%s\"...\n", d); @@ -2450,11 +2450,7 @@ load_ppds(const char *d, // I - Actual directory if (descend) { - if (!load_ppds(filename, name, 1)) - { - cupsDirClose(dir); - return (1); - } + load_ppds(filename, name, 1); } else if ((ptr = filename + strlen(filename) - 14) > filename && !strcmp(ptr, ".printerDriver")) @@ -2565,8 +2561,6 @@ load_ppds(const char *d, // I - Actual directory } cupsDirClose(dir); - - return (1); }