pod: avoid modulo by 0

a % b is undefined behavior if b is 0.
This commit is contained in:
Demi Marie Obenour 2025-07-10 12:10:28 -04:00 committed by Wim Taymans
parent fb315b9050
commit edef57f6c3

View file

@ -205,11 +205,11 @@ SPA_API_POD_COMPARE int spa_pod_compare_is_step_of(uint32_t type, const void *r1
{
switch (type) {
case SPA_TYPE_Int:
if (size < sizeof(int32_t))
if (size < sizeof(int32_t) || *(int32_t *)r2 < 1)
return -EINVAL;
return *(int32_t *) r1 % *(int32_t *) r2 == 0;
case SPA_TYPE_Long:
if (size < sizeof(int64_t))
if (size < sizeof(int64_t) || *(int64_t *)r2 < 1)
return -EINVAL;
return *(int64_t *) r1 % *(int64_t *) r2 == 0;
case SPA_TYPE_Rectangle:
@ -217,8 +217,12 @@ SPA_API_POD_COMPARE int spa_pod_compare_is_step_of(uint32_t type, const void *r1
const struct spa_rectangle *rec1 = (struct spa_rectangle *) r1,
*rec2 = (struct spa_rectangle *) r2;
if (size < sizeof(struct spa_rectangle))
if (size < sizeof(struct spa_rectangle) ||
rec2->width < 1 ||
rec2->height < 1)
{
return -EINVAL;
}
return (rec1->width % rec2->width == 0 &&
rec1->height % rec2->height == 0);
}