From cfb30eedb633ab4c43c466f51b887e1e8b413332 Mon Sep 17 00:00:00 2001 From: Mike Dilger Date: Thu, 12 Nov 2015 14:53:23 +1300 Subject: [PATCH 1/2] Added VALUE_CHARS EncodeSet This character set is based off of rfc5987 section 3.2 https://tools.ietf.org/html/rfc5987#section-3.2 for the ABNF `value-chars` which is used by certain HTTP header field values such as Content-Disposition `filename*` --- make_encode_sets.py | 1 + src/encode_sets.rs | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/make_encode_sets.py b/make_encode_sets.py index 4193d9e96..a0bcbfbd1 100644 --- a/make_encode_sets.py +++ b/make_encode_sets.py @@ -29,6 +29,7 @@ ('PASSWORD', r''' "#<>`?{}@\/'''), ('USERNAME', r''' "#<>`?{}@\/:'''), ('FORM_URLENCODED', r''' !"#$%&\'()+,/:;<=>?@[\]^`{|}~'''), + ('VALUE_CHARS', r''' "%'()*,/:;<->?[\]{}'''), ]: print( "pub static %s: [&'static str; 256] = [\n%s\n];\n\n" diff --git a/src/encode_sets.rs b/src/encode_sets.rs index 82c067e8e..6d51f2680 100644 --- a/src/encode_sets.rs +++ b/src/encode_sets.rs @@ -260,3 +260,39 @@ pub static FORM_URLENCODED: [&'static str; 256] = [ ]; +pub static VALUE_CHARS: [&'static str; 256] = [ + "%00", "%01", "%02", "%03", "%04", "%05", "%06", "%07", + "%08", "%09", "%0A", "%0B", "%0C", "%0D", "%0E", "%0F", + "%10", "%11", "%12", "%13", "%14", "%15", "%16", "%17", + "%18", "%19", "%1A", "%1B", "%1C", "%1D", "%1E", "%1F", + "%20", "!", "%22", "#", "$", "%25", "&", "%27", + "%28", "%29", "%2A", "+", "%2C", "%2D", ".", "%2F", + "0", "1", "2", "3", "4", "5", "6", "7", + "8", "9", "%3A", "%3B", "%3C", "=", "%3E", "%3F", + "@", "A", "B", "C", "D", "E", "F", "G", + "H", "I", "J", "K", "L", "M", "N", "O", + "P", "Q", "R", "S", "T", "U", "V", "W", + "X", "Y", "Z", "%5B", "%5C", "%5D", "^", "_", + "`", "a", "b", "c", "d", "e", "f", "g", + "h", "i", "j", "k", "l", "m", "n", "o", + "p", "q", "r", "s", "t", "u", "v", "w", + "x", "y", "z", "%7B", "|", "%7D", "~", "%7F", + "%80", "%81", "%82", "%83", "%84", "%85", "%86", "%87", + "%88", "%89", "%8A", "%8B", "%8C", "%8D", "%8E", "%8F", + "%90", "%91", "%92", "%93", "%94", "%95", "%96", "%97", + "%98", "%99", "%9A", "%9B", "%9C", "%9D", "%9E", "%9F", + "%A0", "%A1", "%A2", "%A3", "%A4", "%A5", "%A6", "%A7", + "%A8", "%A9", "%AA", "%AB", "%AC", "%AD", "%AE", "%AF", + "%B0", "%B1", "%B2", "%B3", "%B4", "%B5", "%B6", "%B7", + "%B8", "%B9", "%BA", "%BB", "%BC", "%BD", "%BE", "%BF", + "%C0", "%C1", "%C2", "%C3", "%C4", "%C5", "%C6", "%C7", + "%C8", "%C9", "%CA", "%CB", "%CC", "%CD", "%CE", "%CF", + "%D0", "%D1", "%D2", "%D3", "%D4", "%D5", "%D6", "%D7", + "%D8", "%D9", "%DA", "%DB", "%DC", "%DD", "%DE", "%DF", + "%E0", "%E1", "%E2", "%E3", "%E4", "%E5", "%E6", "%E7", + "%E8", "%E9", "%EA", "%EB", "%EC", "%ED", "%EE", "%EF", + "%F0", "%F1", "%F2", "%F3", "%F4", "%F5", "%F6", "%F7", + "%F8", "%F9", "%FA", "%FB", "%FC", "%FD", "%FE", "%FF", +]; + + From 00fd5e3af3c4774868746fbb94c2654482b890c5 Mon Sep 17 00:00:00 2001 From: Mike Dilger Date: Fri, 13 Nov 2015 10:21:59 +1300 Subject: [PATCH 2/2] rename VALUE_CHARS to HTTP_VALUE; flesh out code --- make_encode_sets.py | 2 +- src/encode_sets.rs | 2 +- src/percent_encoding.rs | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/make_encode_sets.py b/make_encode_sets.py index a0bcbfbd1..eb859050f 100644 --- a/make_encode_sets.py +++ b/make_encode_sets.py @@ -29,7 +29,7 @@ ('PASSWORD', r''' "#<>`?{}@\/'''), ('USERNAME', r''' "#<>`?{}@\/:'''), ('FORM_URLENCODED', r''' !"#$%&\'()+,/:;<=>?@[\]^`{|}~'''), - ('VALUE_CHARS', r''' "%'()*,/:;<->?[\]{}'''), + ('HTTP_VALUE', r''' "%'()*,/:;<->?[\]{}'''), ]: print( "pub static %s: [&'static str; 256] = [\n%s\n];\n\n" diff --git a/src/encode_sets.rs b/src/encode_sets.rs index 6d51f2680..d7b5fb9d9 100644 --- a/src/encode_sets.rs +++ b/src/encode_sets.rs @@ -260,7 +260,7 @@ pub static FORM_URLENCODED: [&'static str; 256] = [ ]; -pub static VALUE_CHARS: [&'static str; 256] = [ +pub static HTTP_VALUE: [&'static str; 256] = [ "%00", "%01", "%02", "%03", "%04", "%05", "%06", "%07", "%08", "%09", "%0A", "%0B", "%0C", "%0D", "%0E", "%0F", "%10", "%11", "%12", "%13", "%14", "%15", "%16", "%17", diff --git a/src/percent_encoding.rs b/src/percent_encoding.rs index 90b8f90f6..146bede2f 100644 --- a/src/percent_encoding.rs +++ b/src/percent_encoding.rs @@ -55,6 +55,9 @@ pub static FORM_URLENCODED_ENCODE_SET: EncodeSet = EncodeSet { map: &encode_sets::FORM_URLENCODED, }; +/// This encode set is used for HTTP header values and is defined at +/// https://tools.ietf.org/html/rfc5987#section-3.2 +pub static HTTP_VALUE_ENCODE_SET: EncodeSet = EncodeSet { map: &encode_sets::HTTP_VALUE }; /// Percent-encode the given bytes, and push the result to `output`. ///