From 6909d2767580b680138a6aa49aabf4976770e9f6 Mon Sep 17 00:00:00 2001 From: Paul Pluzhnikov Date: Tue, 24 Feb 2015 08:05:34 -0800 Subject: Fix BZ #17916 - fopen unbounded stack usage for ccs= modes --- libio/tst-fopenloc.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) (limited to 'libio/tst-fopenloc.c') diff --git a/libio/tst-fopenloc.c b/libio/tst-fopenloc.c index 1336023b5a..48c2d3b41c 100644 --- a/libio/tst-fopenloc.c +++ b/libio/tst-fopenloc.c @@ -24,10 +24,36 @@ #include #include #include +#include static const char inputfile[] = "../iconvdata/testdata/ISO-8859-1"; +static +int do_bz17916 (void) +{ + /* BZ #17916 -- check invalid large ccs= case. */ + struct rlimit rl; + getrlimit (RLIMIT_STACK, &rl); + rl.rlim_cur = 1024 * 1024; + setrlimit (RLIMIT_STACK, &rl); + + const size_t sz = 2 * 1024 * 1024; + char *ccs = malloc (sz); + strcpy (ccs, "r,ccs="); + memset (ccs + 6, 'A', sz - 6 - 1); + ccs[sz - 1] = '\0'; + + FILE *fp = fopen (inputfile, ccs); + if (fp != NULL) + { + printf ("unxpected success\n"); + return 1; + } + free (ccs); + + return 0; +} static int do_test (void) @@ -57,7 +83,7 @@ do_test (void) fclose (fp); - return 0; + return do_bz17916 (); } #define TEST_FUNCTION do_test () -- cgit 1.4.1