Skip to content

Commit 9a47d65

Browse files
committed
rustc: Don't panic on corrupt metadata
Fix a panic where the compiler was looking at stale or old metadata. See #19798, #19772, #19757, #19744, #19718, #19691.
1 parent ffc1118 commit 9a47d65

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

src/librustc/metadata/cstore.rs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -236,13 +236,17 @@ impl MetadataBlob {
236236
MetadataArchive(ref ar) => ar.as_slice(),
237237
};
238238
if slice.len() < 4 {
239-
&[]
239+
&[] // corrupt metadata
240240
} else {
241-
let len = ((slice[0] as u32) << 24) |
242-
((slice[1] as u32) << 16) |
243-
((slice[2] as u32) << 8) |
244-
((slice[3] as u32) << 0);
245-
slice.slice(4, len as uint + 4)
241+
let len = (((slice[0] as u32) << 24) |
242+
((slice[1] as u32) << 16) |
243+
((slice[2] as u32) << 8) |
244+
((slice[3] as u32) << 0)) as uint;
245+
if len + 4 <= slice.len() {
246+
slice.slice(4, len + 4)
247+
} else {
248+
&[] // corrupt or old metadata
249+
}
246250
}
247251
}
248252
}

0 commit comments

Comments
 (0)