diff options
author | H. Peter Anvin <hpa@zytor.com> | 2009-07-26 15:29:09 -0700 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2009-07-26 15:29:09 -0700 |
commit | 7ad24562dccca867d9ba591ac7dd242456003c5b (patch) | |
tree | 8103d37019b99d0ad9278b7dbff2981861a99268 | |
parent | 54dd03bfe56d6f23e423ed65054b329e1830ece1 (diff) | |
download | nasm-7ad24562dccca867d9ba591ac7dd242456003c5b.tar.gz nasm-7ad24562dccca867d9ba591ac7dd242456003c5b.tar.bz2 nasm-7ad24562dccca867d9ba591ac7dd242456003c5b.zip |
BR 2827397: fix invalid C in outcoff AddExports()
The construct:
if (i == nsects)
directive_sec =
sects[coff_make_section
(EXPORT_SECTION_NAME, EXPORT_SECTION_FLAGS)];
... where coff_make_section() can change the global variable "sects"
is undefined C, since there is no sequence point involved in the []
operator, and it is therefore fully permitted for the C compiler to
read the sects variable first. Change this construct into two
statements to enforce defined behavior; this also ends up with the
code slightly simpler.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
-rw-r--r-- | output/outcoff.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/output/outcoff.c b/output/outcoff.c index b27cc94..22cb3e8 100644 --- a/output/outcoff.c +++ b/output/outcoff.c @@ -674,16 +674,16 @@ void AddExport(char *name) strcpy(newS->String, name); if (rvp == NULL) { int i; - for (i = 0; i < nsects; i++) + for (i = 0; i < nsects; i++) { if (!strcmp(EXPORT_SECTION_NAME, sects[i]->name)) break; + } + if (i == nsects) - directive_sec = - sects[coff_make_section - (EXPORT_SECTION_NAME, EXPORT_SECTION_FLAGS)]; - else - directive_sec = sects[i]; + i = coff_make_section(EXPORT_SECTION_NAME, EXPORT_SECTION_FLAGS); + + directive_sec = sects[i]; Exports = newS; } else { while (rvp->Next) { |