analyzer: handle strlen(BITS_WITHIN) [PR105899]

gcc/analyzer/ChangeLog:
	PR analyzer/105899
	* region-model.cc (fragment::has_null_terminator): Handle
	SK_BITS_WITHIN.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
This commit is contained in:
David Malcolm 2023-08-24 10:24:40 -04:00
parent 46cb27e56f
commit 2bad0eeb55

View file

@ -3357,10 +3357,29 @@ struct fragment
}
break;
case SK_BITS_WITHIN:
{
const bits_within_svalue *bits_within_sval
= (const bits_within_svalue *)m_sval;
byte_range bytes (0, 0);
if (bits_within_sval->get_bits ().as_byte_range (&bytes))
{
const svalue *inner_sval = bits_within_sval->get_inner_svalue ();
fragment f (byte_range
(start_read_offset - bytes.get_start_bit_offset (),
std::max<byte_size_t> (bytes.m_size_in_bytes,
available_bytes)),
inner_sval);
return f.has_null_terminator (start_read_offset, out_bytes_read);
}
}
break;
default:
// TODO: it may be possible to handle other cases here.
return tristate::TS_UNKNOWN;
break;
}
return tristate::TS_UNKNOWN;
}
static tristate