diff options
-rw-r--r-- | src/erec.c | 6 | ||||
-rw-r--r-- | src/evaluate.c | 8 |
2 files changed, 11 insertions, 3 deletions
@@ -44,6 +44,7 @@ static void erec_destroy(struct error_record *erec) xfree(erec); } +__attribute__((format(printf, 3, 0))) struct error_record *erec_vcreate(enum error_record_types type, const struct location *loc, const char *fmt, va_list ap) @@ -55,10 +56,13 @@ struct error_record *erec_vcreate(enum error_record_types type, erec->num_locations = 0; erec_add_location(erec, loc); - gmp_vasprintf(&erec->msg, fmt, ap); + if (vasprintf(&erec->msg, fmt, ap) < 0) + erec->msg = NULL; + return erec; } +__attribute__((format(printf, 3, 4))) struct error_record *erec_create(enum error_record_types type, const struct location *loc, const char *fmt, ...) diff --git a/src/evaluate.c b/src/evaluate.c index 2c4e8116..43fb9681 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -232,9 +232,13 @@ static int expr_evaluate_value(struct eval_ctx *ctx, struct expr **expr) case TYPE_INTEGER: mpz_init_bitmask(mask, ctx->ectx.len); if (mpz_cmp((*expr)->value, mask) > 0) { + char *valstr = mpz_get_str(NULL, 10, (*expr)->value); + char *rangestr = mpz_get_str(NULL, 10, mask); expr_error(ctx->msgs, *expr, - "Value %Zu exceeds valid range 0-%Zu", - (*expr)->value, mask); + "Value %s exceeds valid range 0-%s", + valstr, rangestr); + free(valstr); + free(rangestr); mpz_clear(mask); return -1; } |