File tree 1 file changed +9
-1
lines changed
1 file changed +9
-1
lines changed Original file line number Diff line number Diff line change @@ -4169,10 +4169,12 @@ impl<T: Deserialize + ReprC> Deserialize for Vec<T> {
4169
4169
let align = mem:: align_of :: < T > ( ) ;
4170
4170
let elem_size = mem:: size_of :: < T > ( ) ;
4171
4171
let num_elems = deserializer. read_usize ( ) ?;
4172
+
4172
4173
if num_elems == 0 {
4173
4174
return Ok ( Vec :: new ( ) ) ;
4174
4175
}
4175
4176
let num_bytes = elem_size * num_elems;
4177
+
4176
4178
let layout = if let Ok ( layout) = std:: alloc:: Layout :: from_size_align ( num_bytes, align) {
4177
4179
Ok ( layout)
4178
4180
} else {
@@ -4182,10 +4184,16 @@ impl<T: Deserialize + ReprC> Deserialize for Vec<T> {
4182
4184
if elem_size == 0 {
4183
4185
NonNull :: dangling ( ) . as_ptr ( )
4184
4186
} else {
4185
- unsafe { std:: alloc:: alloc ( layout. clone ( ) ) }
4187
+ let ptr = unsafe { std:: alloc:: alloc ( layout. clone ( ) ) } ;
4188
+ if ptr. is_null ( ) {
4189
+ panic ! ( "Failed to allocate {} bytes of memory" , num_bytes) ;
4190
+ }
4191
+
4192
+ ptr
4186
4193
} ;
4187
4194
4188
4195
{
4196
+
4189
4197
let slice = unsafe { std:: slice:: from_raw_parts_mut ( ptr as * mut u8 , num_bytes) } ;
4190
4198
match deserializer. reader . read_exact ( slice) {
4191
4199
Ok ( ( ) ) => Ok ( ( ) ) ,
You can’t perform that action at this time.
0 commit comments