-From 455c52a027ab3548953372a0b7bdb0008420e9ba Mon Sep 17 00:00:00 2001
-From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
-Date: Fri, 8 Jun 2018 22:29:50 +0200
-Subject: [PATCH] Fix validation rejecting all NAME and TEXT attrs
-
-When the UTF-8 validation loop finishes successfully, `*ptr` points at
-the `'\0'` at the end of the string. The code misinterpreted this as a
-control character (`*ptr < ' '`) and failed the validation.
-
-Fixes https://github.com/apple/cups/issues/5325
----
- cups/ipp.c | 24 ++++++++++--------------
- 1 file changed, 10 insertions(+), 14 deletions(-)
+From 18545a5e7ab478b187a0d7136ee19496ae32fc9b Mon Sep 17 00:00:00 2001
+From: Michael R Sweet <michael.r.sweet@gmail.com>
+Date: Mon, 11 Jun 2018 09:37:55 -0400
+Subject: [PATCH] Fix regressions in ippValidateAttribute (Issue #5322, Issue
+ #5330)
diff --git a/cups/ipp.c b/cups/ipp.c
-index 95d53cc44..204c71fcd 100644
+index 9346b201f..d6e39d5d8 100644
--- a/cups/ipp.c
+++ b/cups/ipp.c
-@@ -5030,15 +5030,13 @@ ippValidateAttribute(
- else if (*ptr & 0x80)
+@@ -5101,16 +5101,19 @@ ippValidateAttribute(
break;
- else if ((*ptr < ' ' && *ptr != '\n' && *ptr != '\r' && *ptr != '\t') || *ptr == 0x7f)
-- break;
-+ {
-+ ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section 8.3)."), attr->name, attr->values[i].string.text);
-+ return (0);
-+ }
}
- if (*ptr < ' ' || *ptr == 0x7f)
- return (0);
- }
- else if (*ptr)
-+ if (*ptr)
+- {
+- ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."), attr->name, attr->values[i].string.text);
+- return (0);
+- }
++ if (*ptr)
++ {
++ if (*ptr < ' ' || *ptr == 0x7f)
++ {
++ ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section 8.3)."), attr->name, attr->values[i].string.text);
++ return (0);
++ }
++ else
++ {
++ ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."), attr->name, attr->values[i].string.text);
++ return (0);
++ }
++ }
+
+ if ((ptr - attr->values[i].string.text) > (IPP_MAX_TEXT - 1))
{
- ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."), attr->name, attr->values[i].string.text);
- return (0);
-@@ -5088,15 +5086,13 @@ ippValidateAttribute(
- else if (*ptr & 0x80)
+@@ -5163,16 +5166,19 @@ ippValidateAttribute(
break;
- else if (*ptr < ' ' || *ptr == 0x7f)
-- break;
-+ {
-+ ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section 8.1)."), attr->name, attr->values[i].string.text);
-+ return (0);
-+ }
}
- if (*ptr < ' ' || *ptr == 0x7f)
- else if (*ptr)
+ if (*ptr)
{
- ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."), attr->name, attr->values[i].string.text);
- return (0);
+- ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."), attr->name, attr->values[i].string.text);
+- return (0);
+- }
++ if (*ptr < ' ' || *ptr == 0x7f)
++ {
++ ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section 8.1)."), attr->name, attr->values[i].string.text);
++ return (0);
++ }
++ else
++ {
++ ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."), attr->name, attr->values[i].string.text);
++ return (0);
++ }
++ }
+
+ if ((ptr - attr->values[i].string.text) > (IPP_MAX_NAME - 1))
+ {
--- /dev/null
+From 1d677f11f1e3353524d46c2842188eccfcdcd5a2 Mon Sep 17 00:00:00 2001
+From: Michael R Sweet <michael.r.sweet@gmail.com>
+Date: Mon, 11 Jun 2018 09:37:34 -0400
+Subject: [PATCH] Fix regressions in ippValidateAttribute (Issue #5322, Issue
+ #5330)
+
+diff --git a/cups/ipp.c b/cups/ipp.c
+index 95d53cc44..325de02b9 100644
+--- a/cups/ipp.c
++++ b/cups/ipp.c
+@@ -5033,16 +5033,19 @@ ippValidateAttribute(
+ break;
+ }
+
+- if (*ptr < ' ' || *ptr == 0x7f)
+- {
+- ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section 8.3)."), attr->name, attr->values[i].string.text);
+- return (0);
+- }
+- else if (*ptr)
+- {
+- ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."), attr->name, attr->values[i].string.text);
+- return (0);
+- }
++ if (*ptr)
++ {
++ if (*ptr < ' ' || *ptr == 0x7f)
++ {
++ ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad text value \"%s\" - bad control character (PWG 5100.14 section 8.3)."), attr->name, attr->values[i].string.text);
++ return (0);
++ }
++ else
++ {
++ ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."), attr->name, attr->values[i].string.text);
++ return (0);
++ }
++ }
+
+ if ((ptr - attr->values[i].string.text) > (IPP_MAX_TEXT - 1))
+ {
+@@ -5091,16 +5094,19 @@ ippValidateAttribute(
+ break;
+ }
+
+- if (*ptr < ' ' || *ptr == 0x7f)
+- {
+- ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section 8.1)."), attr->name, attr->values[i].string.text);
+- return (0);
+- }
+- else if (*ptr)
++ if (*ptr)
+ {
+- ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."), attr->name, attr->values[i].string.text);
+- return (0);
+- }
++ if (*ptr < ' ' || *ptr == 0x7f)
++ {
++ ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad name value \"%s\" - bad control character (PWG 5100.14 section 8.1)."), attr->name, attr->values[i].string.text);
++ return (0);
++ }
++ else
++ {
++ ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST, _("\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."), attr->name, attr->values[i].string.text);
++ return (0);
++ }
++ }
+
+ if ((ptr - attr->values[i].string.text) > (IPP_MAX_NAME - 1))
+ {