Skip to content

Commit 3acc6db

Browse files
committed
Fix format ~NI crash, re issue #483
1 parent dbe3c30 commit 3acc6db

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

src/bif_format.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,17 @@ static int format_integer(char *dst, cell *c, int grouping, int sep, int decimal
1919
size_t len = mp_int_string_len(&c->val_bigint->ival, radix) - 1;
2020
tmpbuf1 = malloc(len+1);
2121
check_error(tmpbuf1);
22+
mp_int_to_string(&c->val_bigint->ival, radix, tmpbuf1, len+1);
23+
len *= 2;
2224
tmpbuf2 = malloc(len+1);
2325
check_error(tmpbuf2);
24-
mp_int_to_string(&c->val_bigint->ival, radix, tmpbuf1, len+1);
2526
}
2627

2728
const char *src = tmpbuf1 + strlen(tmpbuf1) - 1; // start from back
2829
char *dst2 = tmpbuf2;
2930
int i = 1, j = 1;
3031

31-
while (src >= tmpbuf1) {
32+
while (src > tmpbuf1) {
3233
*dst2++ = *src--;
3334

3435
if (grouping && !decimals && !(i++ % grouping) && *src)
@@ -476,7 +477,7 @@ bool do_format(query *q, cell *str, pl_idx str_ctx, cell *p1, pl_idx p1_ctx, cel
476477

477478
print_term_to_buf(q, c, 0, 0, false);
478479
len = SB_strlen(q->sb);
479-
CHECK_BUF(len*10);
480+
CHECK_BUF(len*2+1);
480481
len = format_integer(dst, c, noargval?3:argval, '_', 0, 10);
481482
break;
482483

@@ -488,7 +489,7 @@ bool do_format(query *q, cell *str, pl_idx str_ctx, cell *p1, pl_idx p1_ctx, cel
488489

489490
print_term_to_buf(q, c, 0, 0, false);
490491
len = SB_strlen(q->sb);
491-
CHECK_BUF(len*10);
492+
CHECK_BUF(len*2+1);
492493
len = format_integer(dst, c, 0, ',', noargval?0:argval, 10);
493494
break;
494495

@@ -500,7 +501,7 @@ bool do_format(query *q, cell *str, pl_idx str_ctx, cell *p1, pl_idx p1_ctx, cel
500501

501502
print_term_to_buf(q, c, 0, 0, false);
502503
len = SB_strlen(q->sb);
503-
CHECK_BUF(len*10);
504+
CHECK_BUF(len*2+1);
504505
len = format_integer(dst, c, 3, ',', noargval?0:argval, 10);
505506
break;
506507

0 commit comments

Comments
 (0)