#36023: Update content_disposition_header to handle control chars.
-------------------------------------+-------------------------------------
     Reporter:  Alex Vandiver        |                    Owner:  Alex
                                     |  Vandiver
         Type:  Bug                  |                   Status:  closed
    Component:  HTTP handling        |                  Version:  dev
     Severity:  Normal               |               Resolution:  fixed
     Keywords:                       |             Triage Stage:  Ready for
                                     |  checkin
    Has patch:  1                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Changes (by Sarah Boyce <42296566+sarahboyce@…>):

 * resolution:   => fixed
 * status:  assigned => closed

Comment:

 In [changeset:"8914b571eb5f93722b9741b1da9eb69347271b11" 8914b57]:
 {{{#!CommitTicketReference repository=""
 revision="8914b571eb5f93722b9741b1da9eb69347271b11"
 Fixed #36023 -- Handled controls chars in content_disposition_header.

 To use the simple `filename="..."` form, the value must conform to the
 official grammar from RFC6266[^1]:

     filename-parm       = "filename" "=" value
     value               = <value, defined in [RFC2616], Section 3.6>
                         ; token | quoted-string

 The `quoted-string` definition comes from RFC 9110[^2]:

 ```
     quoted-string  = DQUOTE *( qdtext / quoted-pair ) DQUOTE
     qdtext         = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text

 The backslash octet ("\") can be used as a single-octet quoting
 mechanism within quoted-string and comment constructs. Recipients that
 process the value of a quoted-string MUST handle a quoted-pair as if
 it were replaced by the octet following the backslash.

     quoted-pair    = "\" ( HTAB / SP / VCHAR / obs-text )

 A sender SHOULD NOT generate a quoted-pair in a quoted-string except
 where necessary to quote DQUOTE and backslash octets occurring within
 that string.
 ```

 That is, quoted strings are able to express horizontal tabs, space
 characters, and everything in the range from 0x21 to 0x7e, expect for
 0x22 (`"`) and 0x5C (`\`), which can still be expressed but must be
 escaped with their own `\`.

 We ignore the case of `obs-text`, which is defined as the range
 0x80-0xFF, since its presence is there for permissive parsing of
 accidental high-bit characters, and it should not be generated by
 conforming implementations.

 Transform this character range into a regex and apply it in addition
 to the "is ASCII" check.  This ensures that all simple filenames are
 expressed in the simple format, and that all filenames with newlines
 and other control characters are properly expressed with the
 percent-encoded `filename*=...`form.

 [^1]: https://datatracker.ietf.org/doc/html/rfc6266#section-4.1
 [^2]: https://datatracker.ietf.org/doc/html/rfc9110#name-quoted-strings
 }}}
-- 
Ticket URL: <https://code.djangoproject.com/ticket/36023#comment:7>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/django-updates/010701943fdb6f6a-284eb764-615e-471e-8b7d-2d8debdc9606-000000%40eu-central-1.amazonses.com.

Reply via email to