@@ -93,7 +93,11 @@ impl<'a> Parser<'a> {
93
93
94
94
self . pos = end;
95
95
96
- if self . full_text [ start..end] . iter ( ) . any ( u8:: is_ascii_control) {
96
+ if self . full_text [ start..end]
97
+ . iter ( )
98
+ . filter ( |x| !x. is_ascii_whitespace ( ) )
99
+ . any ( u8:: is_ascii_control)
100
+ {
97
101
return self . err ( "Found ASCII control character in <text>" ) ;
98
102
}
99
103
@@ -145,6 +149,14 @@ mod tests {
145
149
assert ! ( args. is_empty( ) ) ;
146
150
}
147
151
152
+ #[ test]
153
+ fn parse_event_id_with_control_char ( ) {
154
+ let ( label, args) = Event :: parse_event_id ( Cow :: from ( "foo\x1b " ) ) ;
155
+
156
+ assert_eq ! ( label, "<parse error>" ) ;
157
+ assert ! ( args. is_empty( ) ) ;
158
+ }
159
+
148
160
#[ test]
149
161
fn parse_event_id_one_arg ( ) {
150
162
let ( label, args) = Event :: parse_event_id ( Cow :: from ( "foo\x1e my_arg" ) ) ;
@@ -163,4 +175,22 @@ mod tests {
163
175
vec![ Cow :: from( "arg1" ) , Cow :: from( "arg2" ) , Cow :: from( "arg3" ) ]
164
176
) ;
165
177
}
178
+
179
+ #[ test]
180
+ fn parse_event_id_args_with_whitespace ( ) {
181
+ let ( label, args) = Event :: parse_event_id ( Cow :: from ( "foo\x1e arg\n 1\x1e arg\t 2\x1e arg 3" ) ) ;
182
+
183
+ assert_eq ! ( label, "foo" ) ;
184
+ assert_eq ! (
185
+ args,
186
+ vec![ Cow :: from( "arg\n 1" ) , Cow :: from( "arg\t 2" ) , Cow :: from( "arg 3" ) ]
187
+ ) ;
188
+ }
189
+
190
+ #[ test]
191
+ fn parse_event_id_args_with_control_char ( ) {
192
+ let ( label, args) = Event :: parse_event_id ( Cow :: from ( "foo\x1e arg\x1b 1" ) ) ;
193
+ assert_eq ! ( label, "foo" ) ;
194
+ assert ! ( args. is_empty( ) ) ;
195
+ }
166
196
}
0 commit comments