public inbox for glibc-cvs@sourceware.org help / color / mirror / Atom feed
From: Joe Simmons-Talbott <josepht@sourceware.org> To: glibc-cvs@sourceware.org Subject: [glibc] fileops: Don't process , ccs= as individual mode flags (BZ#18906) Date: Wed, 5 Jul 2023 21:49:26 +0000 (GMT) [thread overview] Message-ID: <20230705214926.34B993856DF1@sourceware.org> (raw) https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=5324d258427fd11ca0f4f595c94016e568b26d6b commit 5324d258427fd11ca0f4f595c94016e568b26d6b Author: Joe Simmons-Talbott <josimmon@redhat.com> Date: Wed Jul 5 21:23:28 2023 +0000 fileops: Don't process ,ccs= as individual mode flags (BZ#18906) In processing the first 7 individual characters of the mode for fopen if ,ccs= is used those characters will be processed as well. Stop processing individual mode flags once a comma is encountered. This has the effect of requiring ,ccs= to be the last mode flag in the mode string. Add a testcase to check that the ,ccs= mode flag is not processed as individual mode flags. Reviewed-by: DJ Delorie <dj@redhat.com> Diff: --- libio/fileops.c | 1 + libio/tst-fopenloc.c | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/libio/fileops.c b/libio/fileops.c index 58c9e985e4..1c1113e339 100644 --- a/libio/fileops.c +++ b/libio/fileops.c @@ -247,6 +247,7 @@ _IO_new_file_fopen (FILE *fp, const char *filename, const char *mode, switch (*++mode) { case '\0': + case ',': break; case '+': omode = O_RDWR; diff --git a/libio/tst-fopenloc.c b/libio/tst-fopenloc.c index 089c61bf41..5b3c1849ef 100644 --- a/libio/tst-fopenloc.c +++ b/libio/tst-fopenloc.c @@ -17,6 +17,7 @@ <https://www.gnu.org/licenses/>. */ #include <errno.h> +#include <fcntl.h> #include <locale.h> #include <mcheck.h> #include <stdio.h> @@ -24,6 +25,7 @@ #include <string.h> #include <wchar.h> #include <sys/resource.h> +#include <support/check.h> #include <support/support.h> #include <support/xstdio.h> @@ -48,13 +50,40 @@ do_bz17916 (void) if (fp != NULL) { printf ("unexpected success\n"); + free (ccs); + fclose (fp); return 1; } + free (ccs); return 0; } +static int +do_bz18906 (void) +{ + /* BZ #18906 -- check processing of ,ccs= as flags case. */ + + const char *ccs = "r,ccs=+ISO-8859-1"; + size_t retval; + + FILE *fp = fopen (inputfile, ccs); + int flags; + + TEST_VERIFY (fp != NULL); + + if (fp != NULL) + { + flags = fcntl (fileno (fp), F_GETFL); + retval = (flags & O_RDWR) | (flags & O_WRONLY); + TEST_COMPARE (retval, false); + fclose (fp); + } + + return EXIT_SUCCESS; +} + static int do_test (void) { @@ -78,7 +107,10 @@ do_test (void) xfclose (fp); - return do_bz17916 (); + TEST_COMPARE (do_bz17916 (), 0); + TEST_COMPARE (do_bz18906 (), 0); + + return EXIT_SUCCESS; } #include <support/test-driver.c>
reply other threads:[~2023-07-05 21:49 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20230705214926.34B993856DF1@sourceware.org \ --to=josepht@sourceware.org \ --cc=glibc-cvs@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).