Skip to content

Commit

Permalink
backend/ipp.c: Fix printing jobs with long names on older IPP printers
Browse files Browse the repository at this point in the history
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
  • Loading branch information
zdohnal authored Jan 16, 2024
2 parents 89f7f5d + d959811 commit 881eab1
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 1 deletion.
1 change: 1 addition & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
6 changes: 5 additions & 1 deletion backend/ipp.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 881eab1

Please sign in to comment.