From 42b010174ea902a1c11709da18faa754293dc4ab Mon Sep 17 00:00:00 2001 From: Dominik Csapak Date: Mon, 26 Jul 2021 09:20:41 +0200 Subject: [PATCH] tape: changer: handle invalid descriptor data from library in status page We get the descriptor length from the library and use that in 'chunks_exact', which panics on length 0. Catch that case and bail out, since that makes no sense here anyway. This could prevent a panic, in case a library sends wrong data. Signed-off-by: Dominik Csapak --- src/tape/changer/sg_pt_changer.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/tape/changer/sg_pt_changer.rs b/src/tape/changer/sg_pt_changer.rs index c94eaf2e..3124b96f 100644 --- a/src/tape/changer/sg_pt_changer.rs +++ b/src/tape/changer/sg_pt_changer.rs @@ -710,7 +710,13 @@ fn decode_element_status_page( let descr_data = reader.read_exact_allocated(len)?; - for descriptor in descr_data.chunks_exact(subhead.descriptor_length as usize) { + let descr_len = subhead.descriptor_length as usize; + + if descr_len == 0 { + bail!("got elements, but descriptor length 0"); + } + + for descriptor in descr_data.chunks_exact(descr_len) { let mut reader = &descriptor[..]; match subhead.element_type_code {