From d49ed55bcfd7c137af8f6832daf2b66090d3f2013cd23ebee228c134568a3295 Mon Sep 17 00:00:00 2001 From: Martin Wilck Date: Wed, 29 Mar 2023 13:04:27 +0000 Subject: [PATCH] Accepting request 1075203 from home:alarrosa:branches:Printing - Add patch to fix hplip applying printf string format parsing to printer attributes returned from CUPS (such as "dnssd://foo%20series._ipp._tcp.local/?uuid=...") which results in a segfault (boo#1209866, lp#2013185): * fix-printer-attributes-parsing.patch OBS-URL: https://build.opensuse.org/request/show/1075203 OBS-URL: https://build.opensuse.org/package/show/Printing/hplip?expand=0&rev=235 --- fix-printer-attributes-parsing.patch | 60 ++++++++++++++++++++++++++++ hplip.changes | 9 +++++ hplip.spec | 3 ++ 3 files changed, 72 insertions(+) create mode 100644 fix-printer-attributes-parsing.patch diff --git a/fix-printer-attributes-parsing.patch b/fix-printer-attributes-parsing.patch new file mode 100644 index 0000000..1623356 --- /dev/null +++ b/fix-printer-attributes-parsing.patch @@ -0,0 +1,60 @@ +Index: hplip-3.22.10/protocol/hp_ipp.c +=================================================================== +--- hplip-3.22.10.orig/protocol/hp_ipp.c ++++ hplip-3.22.10/protocol/hp_ipp.c +@@ -43,6 +43,12 @@ Boston, MA 02110-1301, USA. + #define _STRINGIZE(x) #x + #define STRINGIZE(x) _STRINGIZE(x) + ++#define hplip_strlcpy(dst, src, size) \ ++ do { \ ++ if (!memccpy(dst, src, '\0', size)) \ ++ dst[size - 1] = '\0'; \ ++ } while (0) ++ + + http_t* acquireCupsInstance() + { +@@ -113,7 +119,7 @@ int addCupsPrinter(char *name, char *dev + } + + if ( info == NULL ) +- snprintf( info,sizeof(info), name ); ++ hplip_strlcpy( info, name, sizeof(info)); + + sprintf( printer_uri, "ipp://localhost/printers/%s", name ); + +@@ -514,27 +520,27 @@ int __parsePrinterAttributes(ipp_t *resp + + if ( strcmp(attr_name, "printer-name") == 0 && + val_tag == IPP_TAG_NAME ) { +- snprintf(t_printer->name, sizeof(t_printer->name),ippGetString(attr, 0, NULL) ); ++ hplip_strlcpy(t_printer->name, ippGetString(attr, 0, NULL), sizeof(t_printer->name) ); + } + else if ( strcmp(attr_name, "device-uri") == 0 && + val_tag == IPP_TAG_URI ) { +- snprintf(t_printer->device_uri,sizeof(t_printer->device_uri), ippGetString(attr, 0, NULL) ); ++ hplip_strlcpy(t_printer->device_uri, ippGetString(attr, 0, NULL), sizeof(t_printer->device_uri) ); + } + else if ( strcmp(attr_name, "printer-uri-supported") == 0 && + val_tag == IPP_TAG_URI ) { +- snprintf(t_printer->printer_uri,sizeof(t_printer->printer_uri), ippGetString(attr, 0, NULL) ); ++ hplip_strlcpy(t_printer->printer_uri, ippGetString(attr, 0, NULL), sizeof(t_printer->printer_uri) ); + } + else if ( strcmp(attr_name, "printer-info") == 0 && + val_tag == IPP_TAG_TEXT ) { +- snprintf(t_printer->info,sizeof(t_printer->info), ippGetString(attr, 0, NULL) ); ++ hplip_strlcpy(t_printer->info, ippGetString(attr, 0, NULL), sizeof(t_printer->info) ); + } + else if ( strcmp(attr_name, "printer-location") == 0 && + val_tag == IPP_TAG_TEXT ) { +- snprintf(t_printer->location,sizeof(t_printer->location),ippGetString(attr, 0, NULL) ); ++ hplip_strlcpy(t_printer->location, ippGetString(attr, 0, NULL), sizeof(t_printer->location) ); + } + else if ( strcmp(attr_name, "printer-make-and-model") == 0 && + val_tag == IPP_TAG_TEXT ) { +- snprintf(t_printer->make_model,sizeof(t_printer->make_model),ippGetString(attr, 0, NULL) ); ++ hplip_strlcpy(t_printer->make_model, ippGetString(attr, 0, NULL), sizeof(t_printer->make_model)); + } + else if ( strcmp(attr_name, "printer-state") == 0 && + val_tag == IPP_TAG_ENUM ) { diff --git a/hplip.changes b/hplip.changes index 1cdc11b..5dc52c1 100644 --- a/hplip.changes +++ b/hplip.changes @@ -1,3 +1,12 @@ +------------------------------------------------------------------- +Wed Mar 29 04:59:28 UTC 2023 - Antonio Larrosa + +- Add patch to fix hplip applying printf string format parsing to + printer attributes returned from CUPS (such as + "dnssd://foo%20series._ipp._tcp.local/?uuid=...") which results + in a segfault (boo#1209866, lp#2013185): + * fix-printer-attributes-parsing.patch + ------------------------------------------------------------------- Mon Jan 2 14:08:12 UTC 2023 - Martin Wilck diff --git a/hplip.spec b/hplip.spec index 88b530a..f760474 100644 --- a/hplip.spec +++ b/hplip.spec @@ -86,6 +86,8 @@ Patch403: Revert-changes-from-3.18.5-that-break-hp-setup-for-f.patch # PATCH-FIX-UPSTREAM: https://bugs.launchpad.net/hplip/+bug/1879445 Patch404: hplip-3.20.6-python-includes.patch Patch500: hplip-missing-drivers.patch +# PATCH-FIX-UPSTREAM boo#1209866 lp#2013185 +Patch501: fix-printer-attributes-parsing.patch BuildRequires: %{pymod devel} BuildRequires: %{pymod qt5-devel} BuildRequires: %{pymod xml} @@ -331,6 +333,7 @@ This sub-package is only required by developers. %patch403 -p1 %patch404 -p1 %patch500 -p1 +%patch501 -p1 # replace "env" shebang and "/usr/bin/python" with real executable find . -name '*.py' -o -name pstotiff | \ xargs -n 1 sed -i '1s,^#!\(%{_bindir}/env python\|%{_bindir}/python\),#!%{pyexe},'