Message ID | 20211028212300.2311323-1-shorne@gmail.com |
---|---|
State | New |
Headers | show |
Series | tst-tzset: output reason when creating 4GiB file fails | expand |
On 28/10/2021 18:23, Stafford Horne via Libc-alpha wrote: > Currently, if the temporary file creation fails the create_tz_file > function returns NULL. The NULL pointer is then passed to setenv which > causes a SIGSEGV. Rather than failing with a SIGSEGV print a warning > and exit. > --- > timezone/tst-tzset.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/timezone/tst-tzset.c b/timezone/tst-tzset.c > index d6da2932bb..e6aef6bf51 100644 > --- a/timezone/tst-tzset.c > +++ b/timezone/tst-tzset.c > @@ -103,6 +103,13 @@ static void > test_tz_file (off64_t size) > { > char *path = create_tz_file (size); > + if (path == NULL) > + { > + printf ("creating timezone file of size: %lld MiB failed.\n", > + size / (1024 * 1024)); > + exit (1); > + } > + > if (setenv ("TZ", path, 1) < 0) > { > printf ("setenv failed: %m\n"); > On x86_64: tst-tzset.c: In function ‘test_tz_file’: tst-tzset.c:108:50: error: format ‘%lld’ expects argument of type ‘long long int’, but argument 2 has type ‘off64_t’ {aka ‘long int’} [-Werror=format=] 108 | printf ("creating timezone file of size: %lld MiB failed.\n", You need to use PRId64: diff --git a/timezone/tst-tzset.c b/timezone/tst-tzset.c index e6aef6bf51..3dad42e041 100644 --- a/timezone/tst-tzset.c +++ b/timezone/tst-tzset.c @@ -25,6 +25,7 @@ #include <time.h> #include <unistd.h> #include <support/check.h> +#include <inttypes.h> static int do_test (void); #define TEST_FUNCTION do_test () @@ -105,7 +106,7 @@ test_tz_file (off64_t size) char *path = create_tz_file (size); if (path == NULL) { - printf ("creating timezone file of size: %lld MiB failed.\n", + printf ("creating timezone file of size: %" PRId64 "MiB failed.\n", size / (1024 * 1024)); exit (1); }
diff --git a/timezone/tst-tzset.c b/timezone/tst-tzset.c index d6da2932bb..e6aef6bf51 100644 --- a/timezone/tst-tzset.c +++ b/timezone/tst-tzset.c @@ -103,6 +103,13 @@ static void test_tz_file (off64_t size) { char *path = create_tz_file (size); + if (path == NULL) + { + printf ("creating timezone file of size: %lld MiB failed.\n", + size / (1024 * 1024)); + exit (1); + } + if (setenv ("TZ", path, 1) < 0) { printf ("setenv failed: %m\n");