File tree Expand file tree Collapse file tree 2 files changed +17
-2
lines changed Expand file tree Collapse file tree 2 files changed +17
-2
lines changed Original file line number Diff line number Diff line change @@ -180,7 +180,14 @@ impl<'a> ObjectRef<'a> {
180
180
/// Deserialize an object from a loose serialisation
181
181
pub fn from_loose ( data : & ' a [ u8 ] ) -> Result < ObjectRef < ' a > , LooseDecodeError > {
182
182
let ( kind, size, offset) = loose_header ( data) ?;
183
- Ok ( Self :: from_bytes ( kind, & data[ offset..] [ ..size] ) ?)
183
+
184
+ let body = & data[ offset..]
185
+ . get ( ..size)
186
+ . ok_or ( LooseHeaderDecodeError :: InvalidHeader {
187
+ message : "object data was shorter than its size declared in the header" ,
188
+ } ) ?;
189
+
190
+ Ok ( Self :: from_bytes ( kind, body) ?)
184
191
}
185
192
186
193
/// Deserialize an object of `kind` from the given `data`.
Original file line number Diff line number Diff line change 1
1
use bstr:: ByteSlice ;
2
- use git_object:: { decode, encode, Kind } ;
2
+ use git_object:: { decode, encode, Kind , ObjectRef } ;
3
3
4
4
#[ test]
5
5
fn all ( ) -> Result < ( ) , Box < dyn std:: error:: Error > > {
@@ -18,3 +18,11 @@ fn all() -> Result<(), Box<dyn std::error::Error>> {
18
18
}
19
19
Ok ( ( ) )
20
20
}
21
+
22
+ #[ test]
23
+ fn shorter_than_advertised ( ) {
24
+ assert_eq ! (
25
+ ObjectRef :: from_loose( b"tree 1000\x00 " ) . unwrap_err( ) . to_string( ) ,
26
+ "object data was shorter than its size declared in the header"
27
+ ) ;
28
+ }
You can’t perform that action at this time.
0 commit comments