]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
backend/ipp.c: Fix printing jobs with long names on older IPP printers 866/head
authorZdenek Dohnal <zdohnal@redhat.com>
Tue, 16 Jan 2024 07:31:15 +0000 (08:31 +0100)
committerZdenek Dohnal <zdohnal@redhat.com>
Tue, 16 Jan 2024 07:31:15 +0000 (08:31 +0100)
On older printers (ones which don't support IPP operation Create-Job)
we concatenate job number and title into one string, which we use as
IPP attribute job-name. If the original title was almost 255 chars,
the joining the strings will overflow maximal required length
for this attribute, and Validate-Job fails.

We could check whether the string is longer than 255 and cut it,
but I chose to shrink the buffer to 256, since we already use snprintf()
which will cut the string and put null terminator for us.

Fixes #644

CHANGES.md
backend/ipp.c

index 1349f90fc68526f242d3502fe8e928ac042620bc..9ed2dd2bd9e426ea28a9348c337d1ad33c6b5c67 100644 (file)
@@ -27,6 +27,7 @@ Changes in CUPS v2.5b1 (TBA)
 - Fixed Digest authentication support (Issue #260)
 - Fixed extensive looping in scheduler (Issue #604)
 - Fixed printing multiple files on specific printers (Issue #643)
+- Fixed printing of jobs with job name longer than 255 chars on older printers (Issue #644)
 - Fixed segfault in `cupsGetNamedDest()` when trying to get default printer, but
   the default printer is not set (Issue #719)
 - Fixed ready media support for iOS 17+ (Issue #738)
index 3e609bd5b03f839f8bc9a81ed5bd80f9b19889b5..ae0aa9c4e79b88d4c0f55dbe77609d498947d995 100644 (file)
@@ -216,7 +216,7 @@ main(int  argc,                             /* I - Number of command-line args */
   off_t                compatsize = 0;         /* Size of compatibility file */
   int          port;                   /* Port number (not used) */
   char         uri[HTTP_MAX_URI];      /* Updated URI without user/pass */
-  char         print_job_name[1024];   /* Update job-name for Print-Job */
+  char         print_job_name[256];    /* Update job-name for Print-Job */
   http_status_t        http_status;            /* Status of HTTP request */
   ipp_status_t ipp_status;             /* Status of IPP request */
   http_t       *http;                  /* HTTP connection */
@@ -1464,6 +1464,10 @@ main(int  argc,                          /* I - Number of command-line args */
   }
   else
   {
+   /*
+    * TODO: make this compatible with UTF-8 - possible UTF-8 truncation here..
+    */
+
     snprintf(print_job_name, sizeof(print_job_name), "%s - %s", argv[1],
              argv[3]);
     monitor.job_name = print_job_name;