Replace realloc() et al in unmangle_ansi with stralloc.

I think this is correct. The code, both before and
after, doesn't appear to NUL-terminate its output.

Signed-off-by: Dan Cross <patchdev@fat-dragon.org>
This commit is contained in:
Dan Cross 2018-10-15 18:36:38 +00:00 committed by Andrew Pamment
parent 58481b88eb
commit db53878cb1

View File

@ -820,9 +820,7 @@ void unmangle_ansi(char *body, int len, char **body_out, int *body_len) {
int params[16]; int params[16];
int param_count = 0; int param_count = 0;
int bold = 0; int bold = 0;
char *out; stralloc out = EMPTY_STRALLOC;
int out_len;
int out_max;
char buffer[1024]; char buffer[1024];
int buf_at; int buf_at;
int i, j, k; int i, j, k;
@ -1290,10 +1288,6 @@ void unmangle_ansi(char *body, int len, char **body_out, int *body_len) {
fg = 0x07; fg = 0x07;
bg = 0x00; bg = 0x00;
out_max = 256;
out_len = 0;
out = (char *)malloz(256);
for (i = 0; i < line_count; i++) { for (i = 0; i < line_count; i++) {
buf_at = 0; buf_at = 0;
for (j = 0; j < 79; j++) { for (j = 0; j < 79; j++) {
@ -1402,14 +1396,7 @@ void unmangle_ansi(char *body, int len, char **body_out, int *body_len) {
} }
buffer[buf_at++] = '\r'; buffer[buf_at++] = '\r';
stralloc_catb(&out, buffer, buf_at);
while (buf_at + out_len > out_max) {
out_max += 256;
out = (char *)realloc(out, out_max);
}
memcpy(&out[out_len], buffer, buf_at);
out_len += buf_at;
} }
for (i = 0; i < line_count; i++) { for (i = 0; i < line_count; i++) {
@ -1420,12 +1407,12 @@ void unmangle_ansi(char *body, int len, char **body_out, int *body_len) {
} }
free(fake_screen); free(fake_screen);
while (out[out_len - 2] == '\r') { while (out.s[out.len - 2] == '\r') {
out_len--; out.len--;
} }
*body_out = out; *body_out = out.s;
*body_len = out_len; *body_len = out.len;
} }
int read_message(struct user_record *user, struct msg_headers *msghs, int mailno, int newscan) { int read_message(struct user_record *user, struct msg_headers *msghs, int mailno, int newscan) {