]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Don't error out when scanning for PPDs (Issue #1416)
authorMichael R Sweet <msweet@msweet.org>
Mon, 10 Nov 2025 22:52:01 +0000 (17:52 -0500)
committerMichael R Sweet <msweet@msweet.org>
Mon, 10 Nov 2025 22:52:01 +0000 (17:52 -0500)
CHANGES.md
scheduler/cups-driverd.cxx

index 0c968cbc81f49e94fda3c5365bac16cd6447c467..41d1baf4104c756d66f1ac061be5947f032da1ba 100644 (file)
@@ -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/`)
index 0d0f1f1e2391287e174faf0d9fbd6f0cd6792701..28e37e089dccf8c1f40bd0bc7e31bd562fa81d80 100644 (file)
@@ -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);
 }