avoid declaring an array on stack with non-constant size

Signed-off-by: Erik Boasson <eb@ilities.com>
This commit is contained in:
Erik Boasson 2018-10-26 20:34:35 +08:00
parent fd931a2605
commit 8e20ae547e

View file

@ -670,11 +670,12 @@ static bool content_filter_accepts (const struct ddsi_sertopic * sertopic, const
if (tp->filter_fn) if (tp->filter_fn)
{ {
const dds_topic_descriptor_t * desc = tp->m_descriptor; const dds_topic_descriptor_t * desc = tp->m_descriptor;
char tmp[desc->m_size]; char *tmp = os_malloc (desc->m_size);
memset (tmp, 0, sizeof (tmp)); memset (tmp, 0, desc->m_size);
ddsi_serdata_to_sample (sample, tmp, NULL, NULL); ddsi_serdata_to_sample (sample, tmp, NULL, NULL);
ret = (tp->filter_fn) (tmp, tp->filter_ctx); ret = (tp->filter_fn) (tmp, tp->filter_ctx);
dds_sample_free(tmp, desc, DDS_FREE_CONTENTS_BIT); dds_sample_free(tmp, desc, DDS_FREE_CONTENTS_BIT);
os_free (tmp);
} }
return ret; return ret;
} }
@ -2182,9 +2183,8 @@ static bool update_conditions_locked
dds_readcond * iter; dds_readcond * iter;
int m_pre; int m_pre;
int m_post; int m_post;
bool deserialised = (rhc->topic->status_cb_entity->filter_fn != 0);
const struct dds_topic_descriptor *desc = rhc->topic->status_cb_entity->m_descriptor; const struct dds_topic_descriptor *desc = rhc->topic->status_cb_entity->m_descriptor;
char tmp[desc->m_size]; char *tmp = NULL;
TRACE (("update_conditions_locked(%p) - inst %u nonempty %u disp %u nowr %u new %u samples %u read %u\n", TRACE (("update_conditions_locked(%p) - inst %u nonempty %u disp %u nowr %u new %u samples %u read %u\n",
(void *) rhc, rhc->n_instances, rhc->n_nonempty_instances, rhc->n_not_alive_disposed, (void *) rhc, rhc->n_instances, rhc->n_nonempty_instances, rhc->n_not_alive_disposed,
@ -2227,11 +2227,11 @@ static bool update_conditions_locked
} }
else if (m_pre < m_post) else if (m_pre < m_post)
{ {
if (sample && !deserialised && (dds_entity_kind(iter->m_entity.m_hdl) == DDS_KIND_COND_QUERY)) if (sample && tmp == NULL && (dds_entity_kind(iter->m_entity.m_hdl) == DDS_KIND_COND_QUERY))
{ {
memset (tmp, 0, sizeof (tmp)); tmp = os_malloc (desc->m_size);
memset (tmp, 0, desc->m_size);
ddsi_serdata_to_sample (sample, tmp, NULL, NULL); ddsi_serdata_to_sample (sample, tmp, NULL, NULL);
deserialised = true;
} }
if if
( (
@ -2264,8 +2264,11 @@ static bool update_conditions_locked
iter = iter->m_rhc_next; iter = iter->m_rhc_next;
} }
if (deserialised) if (tmp)
{
dds_sample_free (tmp, desc, DDS_FREE_CONTENTS_BIT); dds_sample_free (tmp, desc, DDS_FREE_CONTENTS_BIT);
os_free (tmp);
}
return trigger; return trigger;
} }