Summary: | eu-strip generates empty output if there is nothing to do | ||
---|---|---|---|
Product: | elfutils | Reporter: | Paulo Andrade <paulo.cesar.pereira.de.andrade> |
Component: | tools | Assignee: | Not yet assigned to anyone <unassigned> |
Status: | RESOLVED FIXED | ||
Severity: | normal | CC: | elfutils-devel, mark |
Priority: | P2 | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Host: | Target: | ||
Build: | Last reconfirmed: | 2017-06-07 00:00:00 |
Description
Paulo Andrade
2017-05-25 15:40:57 UTC
We seem to never remove the output file if we created it, but couldn't finish it (either because there is nothing to do or some error occurred). We should always remove it in that case. Testing the following: diff --git a/src/strip.c b/src/strip.c index f747441..c5dbc9c 100644 --- a/src/strip.c +++ b/src/strip.c @@ -1063,8 +1063,11 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, /* Test whether we are doing anything at all. */ if (cnt == idx) - /* Nope, all removable sections are already gone. */ - goto fail_close; + { + /* Nope, all removable sections are already gone. */ + result = 1; + goto fail_close; + } /* Create the reference to the file with the debug info. */ if (debug_fname != NULL && !remove_shdrs) @@ -2226,7 +2229,11 @@ cannot set access and modification date of '%s'"), /* Close the file descriptor if we created a new file. */ if (output_fname != NULL) - close (fd); + { + close (fd); + if (result != 0) + unlink (output_fname); + } return result; } The patch that I came up with works slightly different. While writing a testcase I noticed we have a similar (though opposite) issue with -f debug. Also it felt more correct to always make sure the -o output file was correct (and not just not generate it if nothing was stripped out). https://sourceware.org/ml/elfutils-devel/2017-q2/msg00237.html commit b58aebe71e0b4863db1b7fd3e942e36303257f3a Author: Mark Wielaard <mark@klomp.org> Date: Wed Jun 7 20:32:38 2017 +0200 strip: Don't generate empty output file when nothing to do. If there was nothing to do strip would skip generating a separate debug file if one was requested, but it would also not finish the creation of a new output file (with the non-stripped sections). Also if there was an error any partially created output would be kept. Make sure that when the -o output file option is given we always generate a complete output file (except on error). Also make sure that when the -f debug file option is given it is only generated when it is not empty. Add testcase run-strip-nothing.sh that tests the various combinations. https://sourceware.org/bugzilla/show_bug.cgi?id=21522 Signed-off-by: Mark Wielaard <mark@klomp.org> |