Skip to content

Commit ac44190

Browse files
committed
vsnprintf fix
1 parent e3f272d commit ac44190

1 file changed

Lines changed: 10 additions & 5 deletions

File tree

src/tl_error.c

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,26 @@ void tl_error_set(TLError *error, TLErrorCode code, const char *message, ...) {
2424
// Set message if provided
2525
if (message) {
2626
va_list args;
27+
va_list args_copy;
28+
2729
va_start(args, message);
28-
int size = vsnprintf(NULL, 0, message, args);
29-
va_end(args);
30+
va_copy(args_copy, args);
31+
32+
int size = vsnprintf(NULL, 0, message, args_copy);
33+
va_end(args_copy);
3034

3135
if (size < 0) {
36+
va_end(args);
3237
return; // ignore if vsnprintf fails
3338
}
3439

35-
error->message = malloc(size + 1); // include null terminator by adding 1
40+
error->message_size = (size_t)size + 1;
41+
error->message = malloc(error->message_size); // include null terminator by adding 1
3642
if (!error->message) {
43+
va_end(args);
3744
return; // ignore if malloc fails
3845
}
39-
error->message_size = size + 1;
4046

41-
va_start(args, message);
4247
vsnprintf((char *)error->message, error->message_size, message, args);
4348
va_end(args);
4449
}

0 commit comments

Comments
 (0)