From 5594cf848c90a3713183da7c298b501899c191f1 Mon Sep 17 00:00:00 2001 From: Darren Carreras Date: Mon, 10 Aug 2026 13:04:14 -0400 Subject: [PATCH] Bound SAS format suffix writes --- src/sas/readstat_sas7bdat_read.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/sas/readstat_sas7bdat_read.c b/src/sas/readstat_sas7bdat_read.c index 9d8107d..e0588e3 100644 --- a/src/sas/readstat_sas7bdat_read.c +++ b/src/sas/readstat_sas7bdat_read.c @@ -701,12 +701,13 @@ static readstat_variable_t *sas7bdat_init_variable(sas7bdat_ctx_t *ctx, int i, goto cleanup; } size_t len = strlen(variable->format); - if (ctx->col_info[i].format_width) { - len += snprintf(variable->format + len, sizeof(variable->format) - len, + if (ctx->col_info[i].format_width && len < sizeof(variable->format) - 1) { + snprintf(variable->format + len, sizeof(variable->format) - len, "%d", ctx->col_info[i].format_width); + len = strlen(variable->format); } - if (len && ctx->col_info[i].format_digits) { - len += snprintf(variable->format + len, sizeof(variable->format) - len, + if (len && ctx->col_info[i].format_digits && len < sizeof(variable->format) - 1) { + snprintf(variable->format + len, sizeof(variable->format) - len, ".%d", ctx->col_info[i].format_digits); } if ((retval = sas7bdat_copy_text_ref(variable->label, sizeof(variable->label),