@@ -34,6 +34,8 @@ pub enum DafsaFileLoadError {
3434 Truncated ,
3535 #[ error( "not a libpsl DAFSA file (missing or malformed magic)" ) ]
3636 BadMagic ,
37+ #[ error( "malformed DAFSA header (magic present but header is otherwise invalid)" ) ]
38+ BadHeader ,
3739 #[ error( "unsupported DAFSA version: {0}" ) ]
3840 UnsupportedVersion ( u32 ) ,
3941}
@@ -111,23 +113,23 @@ fn parse_header(bytes: &[u8]) -> Result<Vec<u8>, DafsaFileLoadError> {
111113 return Err ( DafsaFileLoadError :: BadMagic ) ;
112114 }
113115 if header. last ( ) != Some ( & b'\n' ) {
114- return Err ( DafsaFileLoadError :: BadMagic ) ;
116+ return Err ( DafsaFileLoadError :: BadHeader ) ;
115117 }
116118 let version_field = header
117119 . get ( MAGIC . len ( ) ..HEADER_LEN - 1 )
118- . ok_or ( DafsaFileLoadError :: BadMagic ) ?;
120+ . ok_or ( DafsaFileLoadError :: BadHeader ) ?;
119121 let digit_count = version_field
120122 . iter ( )
121123 . take_while ( |b| b. is_ascii_digit ( ) )
122124 . count ( ) ;
123125 let version_digits = version_field
124126 . get ( ..digit_count)
125127 . filter ( |digits| !digits. is_empty ( ) )
126- . ok_or ( DafsaFileLoadError :: BadMagic ) ?;
128+ . ok_or ( DafsaFileLoadError :: BadHeader ) ?;
127129 let version: u32 = std:: str:: from_utf8 ( version_digits)
128- . map_err ( |_| DafsaFileLoadError :: BadMagic ) ?
130+ . map_err ( |_| DafsaFileLoadError :: BadHeader ) ?
129131 . parse ( )
130- . map_err ( |_| DafsaFileLoadError :: BadMagic ) ?;
132+ . map_err ( |_| DafsaFileLoadError :: BadHeader ) ?;
131133 if version != 0 {
132134 return Err ( DafsaFileLoadError :: UnsupportedVersion ( version) ) ;
133135 }
@@ -407,7 +409,7 @@ mod tests {
407409 bad[ HEADER_LEN - 1 ] = b' ' ;
408410 assert ! ( matches!(
409411 parse_header( & bad) ,
410- Err ( DafsaFileLoadError :: BadMagic )
412+ Err ( DafsaFileLoadError :: BadHeader )
411413 ) ) ;
412414 }
413415}
0 commit comments