58 lines
2.4 KiB
Diff
58 lines
2.4 KiB
Diff
|
diff --git a/cups/ppd-cache.c b/cups/ppd-cache.c
|
||
|
index 977d0c6..c484d33 100644
|
||
|
--- a/cups/ppd-cache.c
|
||
|
+++ b/cups/ppd-cache.c
|
||
|
@@ -3134,10 +3134,10 @@ _ppdCreateFromIPP(char *buffer, /* I - Filename buffer */
|
||
|
cupsFilePuts(fp, "*cupsSNMPSupplies: False\n");
|
||
|
cupsFilePrintf(fp, "*cupsLanguages: \"%s\"\n", lang->language);
|
||
|
|
||
|
- if ((attr = ippFindAttribute(response, "printer-more-info", IPP_TAG_URI)) != NULL)
|
||
|
+ if ((attr = ippFindAttribute(response, "printer-more-info", IPP_TAG_URI)) != NULL && ippValidateAttribute(attr))
|
||
|
cupsFilePrintf(fp, "*APSupplies: \"%s\"\n", ippGetString(attr, 0, NULL));
|
||
|
|
||
|
- if ((attr = ippFindAttribute(response, "printer-charge-info-uri", IPP_TAG_URI)) != NULL)
|
||
|
+ if ((attr = ippFindAttribute(response, "printer-charge-info-uri", IPP_TAG_URI)) != NULL && ippValidateAttribute(attr))
|
||
|
cupsFilePrintf(fp, "*cupsChargeInfoURI: \"%s\"\n", ippGetString(attr, 0, NULL));
|
||
|
|
||
|
if ((attr = ippFindAttribute(response, "printer-strings-uri", IPP_TAG_URI)) != NULL)
|
||
|
diff --git a/scheduler/ipp.c b/scheduler/ipp.c
|
||
|
index 728d164..5089172 100644
|
||
|
--- a/scheduler/ipp.c
|
||
|
+++ b/scheduler/ipp.c
|
||
|
@@ -5773,6 +5773,18 @@ create_local_bg_thread(
|
||
|
cupsdLogMessage(CUPSD_LOG_DEBUG, "%s: IPP/1.1 Get-Printer-Attributes returned %s (%s)", printer->name, ippErrorString(cupsLastError()), cupsLastErrorString());
|
||
|
}
|
||
|
|
||
|
+ // Validate response from printer...
|
||
|
+ if (!ippValidateAttributes(response))
|
||
|
+ {
|
||
|
+ cupsdLogMessage(CUPSD_LOG_ERROR, "%s: The printer contains invalid attributes.", printer->name);
|
||
|
+
|
||
|
+ if (response)
|
||
|
+ ippDelete(response);
|
||
|
+
|
||
|
+ httpClose(http);
|
||
|
+ return (NULL);
|
||
|
+ }
|
||
|
+
|
||
|
// TODO: Grab printer icon file...
|
||
|
httpClose(http);
|
||
|
|
||
|
diff --git a/systemv/lpadmin.c b/systemv/lpadmin.c
|
||
|
index daf24d5..eba7551 100644
|
||
|
--- a/systemv/lpadmin.c
|
||
|
+++ b/systemv/lpadmin.c
|
||
|
@@ -1226,6 +1226,12 @@ get_printer_ppd(
|
||
|
ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", sizeof(pattrs) / sizeof(pattrs[0]), NULL, pattrs);
|
||
|
response = cupsDoRequest(http, request, resource);
|
||
|
|
||
|
+ if (response && !ippValidateAttributes(response))
|
||
|
+ {
|
||
|
+ _cupsLangPrintf(stderr, _("%s: The printer \"%s\" contains invalid IPP attributes."), "lpadmin", uri);
|
||
|
+ return (NULL);
|
||
|
+ }
|
||
|
+
|
||
|
if (cupsLastError() >= IPP_STATUS_REDIRECTION_OTHER_SITE)
|
||
|
{
|
||
|
_cupsLangPrintf(stderr, _("%s: Unable to query printer: %s"), "lpadmin", cupsLastErrorString());
|