@@ -401,7 +401,13 @@ fn determine_preprocessors(config: &Config) -> Result<Vec<Box<dyn Preprocessor>>
401401 || preprocessor_table. contains_key ( name)
402402 } ;
403403
404- if let Some ( before) = table. get ( "before" ) . and_then ( Value :: as_array) {
404+ if let Some ( before) = table. get ( "before" ) {
405+ let before = before. as_array ( ) . ok_or_else ( || {
406+ Error :: msg ( format ! (
407+ "Expected preprocessor.{}.before to be an array" ,
408+ name
409+ ) )
410+ } ) ?;
405411 for after in before {
406412 let after = after. as_str ( ) . ok_or_else ( || {
407413 Error :: msg ( format ! (
@@ -416,7 +422,13 @@ fn determine_preprocessors(config: &Config) -> Result<Vec<Box<dyn Preprocessor>>
416422 }
417423 }
418424
419- if let Some ( after) = table. get ( "after" ) . and_then ( Value :: as_array) {
425+ if let Some ( after) = table. get ( "after" ) {
426+ let after = after. as_array ( ) . ok_or_else ( || {
427+ Error :: msg ( format ! (
428+ "Expected preprocessor.{}.after to be an array" ,
429+ name
430+ ) )
431+ } ) ?;
420432 for before in after {
421433 let before = before. as_str ( ) . ok_or_else ( || {
422434 Error :: msg ( format ! (
@@ -630,6 +642,30 @@ mod tests {
630642 assert_eq ! ( random, "python random.py" ) ;
631643 }
632644
645+ #[ test]
646+ fn preprocessor_before_must_be_array ( ) {
647+ let cfg_str = r#"
648+ [preprocessor.random]
649+ before = 0
650+ "# ;
651+
652+ let cfg = Config :: from_str ( cfg_str) . unwrap ( ) ;
653+
654+ assert ! ( determine_preprocessors( & cfg) . is_err( ) ) ;
655+ }
656+
657+ #[ test]
658+ fn preprocessor_after_must_be_array ( ) {
659+ let cfg_str = r#"
660+ [preprocessor.random]
661+ after = 0
662+ "# ;
663+
664+ let cfg = Config :: from_str ( cfg_str) . unwrap ( ) ;
665+
666+ assert ! ( determine_preprocessors( & cfg) . is_err( ) ) ;
667+ }
668+
633669 #[ test]
634670 fn preprocessor_order_is_honored ( ) {
635671 let cfg_str = r#"
0 commit comments