From cdcf24ee14c27b77744ff52ab3ae852821207eb0 Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Thu, 17 Jul 2025 14:44:05 +0200 Subject: [PATCH] iconv: iconv -o should not create executable files (bug 33164) The mistake is that open must use 0666 to pick up the umask, and not 0777 (which is required by mkdir). Fixes commit 8ef3cff9d1ceafe369f982d980678d749fb93bd2 ("iconv: Support in-place conversions (bug 10460, bug 32033)"). Reviewed-by: H.J. Lu --- iconv/iconv_prog.c | 4 ++-- iconv/tst-iconv_prog-buffer.sh | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/iconv/iconv_prog.c b/iconv/iconv_prog.c index 7dba5d8dff..558cfb11a3 100644 --- a/iconv/iconv_prog.c +++ b/iconv/iconv_prog.c @@ -436,7 +436,7 @@ input_error (const char *path) static void open_output_direct (void) { - output_fd = open64 (output_file, O_WRONLY | O_CREAT | O_TRUNC, 0777); + output_fd = open64 (output_file, O_WRONLY | O_CREAT | O_TRUNC, 0666); if (output_fd < 0) output_error (); } @@ -457,7 +457,7 @@ prepare_output_file (char **argv) else { /* If iconv creates the output file, no overlap is possible. */ - output_fd = open64 (output_file, O_WRONLY | O_CREAT | O_EXCL, 0777); + output_fd = open64 (output_file, O_WRONLY | O_CREAT | O_EXCL, 0666); if (output_fd >= 0) output_buffer_size = copy_buffer_size; else diff --git a/iconv/tst-iconv_prog-buffer.sh b/iconv/tst-iconv_prog-buffer.sh index 1c499d590d..40340c38fa 100644 --- a/iconv/tst-iconv_prog-buffer.sh +++ b/iconv/tst-iconv_prog-buffer.sh @@ -75,6 +75,10 @@ run_iconv () { } check_out_expected () { + if test -x "$tmp/out" ; then + echo "error: iconv output file is executable" + failure=true + fi if ! cmp -s "$tmp/out" "$tmp/expected" ; then echo "error: iconv output difference" >&$logfd echo "*** expected ***" >&$logfd