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),