File tree Expand file tree Collapse file tree 2 files changed +25
-1
lines changed Expand file tree Collapse file tree 2 files changed +25
-1
lines changed Original file line number Diff line number Diff line change @@ -236,12 +236,17 @@ pub enum Base {
236236/// (e.g. "#![deny(missing_docs)]").
237237pub fn strip_shebang ( input : & str ) -> Option < usize > {
238238 debug_assert ! ( !input. is_empty( ) ) ;
239- if !input. starts_with ( "#!" ) || input. starts_with ( "#![" ) || input. starts_with ( "#! [" ) {
239+ let s: & str = & remove_whitespace ( input) ;
240+ if !s. starts_with ( "#!" ) || s. starts_with ( "#![" ) || s. starts_with ( "#! [" ) {
240241 return None ;
241242 }
242243 Some ( input. find ( '\n' ) . unwrap_or ( input. len ( ) ) )
243244}
244245
246+ fn remove_whitespace ( s : & str ) -> String {
247+ s. chars ( ) . filter ( |c| !c. is_whitespace ( ) ) . collect ( )
248+ }
249+
245250/// Parses the first token from the provided input string.
246251pub fn first_token ( input : & str ) -> Token {
247252 debug_assert ! ( !input. is_empty( ) ) ;
Original file line number Diff line number Diff line change @@ -145,4 +145,23 @@ mod tests {
145145 } ) ,
146146 ) ;
147147 }
148+
149+ #[ test]
150+ fn test_valid_shebang ( ) {
151+ // https://github.com/rust-lang/rust/issues/70528
152+ let input = "#!/usr/bin/rustrun" ;
153+ let actual = strip_shebang ( input) ;
154+ let expected: Option < usize > = Some ( 18 ) ;
155+ assert_eq ! ( expected, actual) ;
156+ }
157+
158+ #[ test]
159+ fn test_invalid_shebang_valid_rust_syntax ( ) {
160+ // https://github.com/rust-lang/rust/issues/70528
161+ let input = "#! [bad_attribute]" ;
162+ let actual = strip_shebang ( input) ;
163+ let expected: Option < usize > = None ;
164+ assert_eq ! ( expected, actual) ;
165+ }
166+
148167}
You can’t perform that action at this time.
0 commit comments