diff --git a/src/core/ddsc/src/dds_read.c b/src/core/ddsc/src/dds_read.c index 09139f5..ae386ca 100644 --- a/src/core/ddsc/src/dds_read.c +++ b/src/core/ddsc/src/dds_read.c @@ -84,7 +84,10 @@ static dds_return_t dds_read_impl (bool take, dds_entity_t reader_or_condition, if (rd->m_loan) { if (rd->m_loan_size >= maxs) - buf[0] = rd->m_loan; + { + /* This ensures buf is properly initialized */ + ddsi_sertopic_realloc_samples (buf, rd->m_topic->m_stopic, rd->m_loan, rd->m_loan_size, rd->m_loan_size); + } else { ddsi_sertopic_realloc_samples (buf, rd->m_topic->m_stopic, rd->m_loan, rd->m_loan_size, maxs); diff --git a/src/core/ddsc/src/dds_sertopic_builtintopic.c b/src/core/ddsc/src/dds_sertopic_builtintopic.c index 325d536..25c29e6 100644 --- a/src/core/ddsc/src/dds_sertopic_builtintopic.c +++ b/src/core/ddsc/src/dds_sertopic_builtintopic.c @@ -93,7 +93,7 @@ static void sertopic_builtin_realloc_samples (void **ptrs, const struct ddsi_ser { const struct ddsi_sertopic_builtintopic *tp = (const struct ddsi_sertopic_builtintopic *)sertopic_common; const size_t size = get_size (tp->type); - char *new = dds_realloc (old, size * count); + char *new = (oldcount == count) ? old : dds_realloc (old, size * count); if (new && count > oldcount) memset (new + size * oldcount, 0, size * (count - oldcount)); for (size_t i = 0; i < count; i++) diff --git a/src/core/ddsi/src/ddsi_sertopic_default.c b/src/core/ddsi/src/ddsi_sertopic_default.c index 81a40c7..3400a0d 100644 --- a/src/core/ddsi/src/ddsi_sertopic_default.c +++ b/src/core/ddsi/src/ddsi_sertopic_default.c @@ -42,7 +42,7 @@ static void sertopic_default_realloc_samples (void **ptrs, const struct ddsi_ser { const struct ddsi_sertopic_default *tp = (const struct ddsi_sertopic_default *)sertopic_common; const size_t size = tp->type->m_size; - char *new = dds_realloc (old, size * count); + char *new = (oldcount == count) ? old : dds_realloc (old, size * count); if (new && count > oldcount) memset (new + size * oldcount, 0, size * (count - oldcount)); for (size_t i = 0; i < count; i++)