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());