Skip to content

Commit fe9613c

Browse files
authored
Fix percent-encoding of percent sign in grpc-message header (#2107)
1 parent 910a4f1 commit fe9613c

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

tonic/src/metadata/map.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2500,7 +2500,7 @@ mod tests {
25002500
#[test]
25012501
fn test_to_headers_encoding() {
25022502
use crate::Status;
2503-
let special_char_message = "Beyond ascii \t\n\r🌶️💉💧🐮🍺";
2503+
let special_char_message = "Beyond 100% ascii \t\n\r🌶️💉💧🐮🍺";
25042504
let s1 = Status::unknown(special_char_message);
25052505

25062506
assert_eq!(s1.message(), special_char_message);
@@ -2509,6 +2509,17 @@ mod tests {
25092509
let s2 = Status::from_header_map(&s1_map).unwrap();
25102510

25112511
assert_eq!(s1.message(), s2.message());
2512+
2513+
assert!(
2514+
s1_map
2515+
.get("grpc-message")
2516+
.unwrap()
2517+
.to_str()
2518+
.unwrap()
2519+
.starts_with("Beyond%20100%25%20ascii"),
2520+
"Percent sign or other character isn't encoded as desired: {:?}",
2521+
s1_map.get("grpc-message")
2522+
);
25122523
}
25132524

25142525
#[test]

tonic/src/status.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ const ENCODING_SET: &AsciiSet = &CONTROLS
1414
.add(b' ')
1515
.add(b'"')
1616
.add(b'#')
17+
.add(b'%')
1718
.add(b'<')
1819
.add(b'>')
1920
.add(b'`')

0 commit comments

Comments
 (0)