summaryrefslogtreecommitdiffstats
path: root/libasm
diff options
context:
space:
mode:
authorMark Wielaard <[email protected]>2020-04-26 01:20:57 +0200
committerMark Wielaard <[email protected]>2020-04-26 02:27:01 +0200
commit8c5bd878a940817088fd7907eb9d503ec98d3437 (patch)
treec4a6e991b04fc920bcc4d021b82ae7e923b5b965 /libasm
parenta5d73b3e51afada171da9781089cd0e8fc9f64a6 (diff)
libasm: Fix double fclose in asm_end.
GCC10 -fanalyzer found a double fclose in asm_end. asm_end can call text_end, which calls fclose and checks for errors, then asm_end calls __libasm_finictx which can call fclose again (but doesn't check for errors). Call fflush in text_end instead. fflush will generate the same error fclose would if something went wrong writing out the file. Signed-off-by: Mark Wielaard <[email protected]>
Diffstat (limited to 'libasm')
-rw-r--r--libasm/ChangeLog4
-rw-r--r--libasm/asm_end.c2
2 files changed, 5 insertions, 1 deletions
diff --git a/libasm/ChangeLog b/libasm/ChangeLog
index 7b0d3df3..2c092abe 100644
--- a/libasm/ChangeLog
+++ b/libasm/ChangeLog
@@ -1,3 +1,7 @@
+2020-04-25 Mark Wielaard <[email protected]>
+
+ * asm_end.c (text_end): Call fflush instead of fclose.
+
2020-01-08 Mark Wielaard <[email protected]>
* libasm.h: Don't include libebl.h. Define an opaque Ebl handle.
diff --git a/libasm/asm_end.c b/libasm/asm_end.c
index 99e95017..3b8582fd 100644
--- a/libasm/asm_end.c
+++ b/libasm/asm_end.c
@@ -47,7 +47,7 @@
static int
text_end (AsmCtx_t *ctx __attribute__ ((unused)))
{
- if (fclose (ctx->out.file) != 0)
+ if (fflush (ctx->out.file) != 0)
{
__libasm_seterrno (ASM_E_IOERROR);
return -1;