Fix TIC54X buffer overruns

MALLOC_PERTURB_=1 results in "FAIL: c54x macros".

	* config/tc-tic54x.c (tic54x_mlib): Don't write garbage past
	end of archive to temp file.
	(tic54x_start_line_hook): Start scan for parallel on next line,
	not one char into next line (which may overrun the buffer).
This commit is contained in:
Alan Modra 2014-06-16 10:33:26 +09:30
parent ee0738df02
commit 6e210b4129
2 changed files with 10 additions and 3 deletions

View File

@ -1,3 +1,10 @@
2014-06-16 Alan Modra <amodra@gmail.com>
* config/tc-tic54x.c (tic54x_mlib): Don't write garbage past
end of archive to temp file.
(tic54x_start_line_hook): Start scan for parallel on next line,
not one char into next line (which may overrun the buffer).
2014-06-16 Alan Modra <amodra@gmail.com>
* config/tc-vax.c (md_apply_fix): Rewrite.

View File

@ -2368,13 +2368,13 @@ tic54x_mlib (int ignore ATTRIBUTE_UNUSED)
FILE *ftmp;
/* We're not sure how big it is, but it will be smaller than "size". */
bfd_bread (buf, size, mbfd);
size = bfd_bread (buf, size, mbfd);
/* Write to a temporary file, then use s_include to include it
a bit of a hack. */
ftmp = fopen (fname, "w+b");
fwrite ((void *) buf, size, 1, ftmp);
if (buf[size - 1] != '\n')
if (size == 0 || buf[size - 1] != '\n')
fwrite ("\n", 1, 1, ftmp);
fclose (ftmp);
free (buf);
@ -4777,7 +4777,7 @@ tic54x_start_line_hook (void)
line[endp - input_line_pointer] = 0;
/* Scan ahead for parallel insns. */
parallel_on_next_line_hint = next_line_shows_parallel (endp + 1);
parallel_on_next_line_hint = next_line_shows_parallel (endp);
/* If within a macro, first process forced replacements. */
if (macro_level > 0)