Commit 33f9b06b authored by Juan A. Suárez's avatar Juan A. Suárez Committed by Marge Bot
Browse files

v3dv: check dest bitsize in color blit



Otherwise, if src_bit_size > 0 and dst_bit_size == 0, we end up doing a
bad shift in `1 << (dst_bit_size - 1)`, as `dst_bit_size - 1` is a
negative value (in this case would be MAX_UINT32).

Fixes CID#1468134 "Bad bit shift operation (BAD_SHIFT)":
   "large_shift: In expression 1 << dst_bit_size - 1U, left shifting by
    more than 31 bits has undefined behavior. The shift amount,
    dst_bit_size - 1U, is 4294967295."

v2:
 - Use an assertion instead (Iago)
Reviewed-by: Iago Toral's avatarIago Toral Quiroga <itoral@igalia.com>
Signed-off-by: Juan A. Suárez's avatarJuan A. Suarez Romero <jasuarez@igalia.com>
Part-of: <!10251>
parent fd8d71ce
Pipeline #310647 waiting for manual action with stages
......@@ -4657,6 +4657,7 @@ get_color_blit_fs(struct v3dv_device *device,
if (dst_bit_size >= src_bit_size)
continue;
assert(dst_bit_size > 0);
if (util_format_is_pure_uint(dst_pformat)) {
nir_ssa_def *max = nir_imm_int(&b, (1 << dst_bit_size) - 1);
c[i] = nir_umin(&b, c[i], max);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment