@@ -940,7 +940,9 @@ main (int argc, char **argv)
else if (nt == 3 && strcmp (the_words[0], "chmod") == 0)
{
long int m;
+ errno = 0;
m = strtol (the_words[1], NULL, 0);
+ TEST_COMPARE (errno, 0);
if (chmod (the_words[2], m) < 0)
FAIL_EXIT1 ("chmod %s: %s\n",
the_words[2], strerror (errno));
@@ -133,7 +133,9 @@ static int
parse_int (const char *str)
{
char *endptr;
- long int ret = strtol (str, &endptr, 10);
+ long int ret;
+ errno = 0;
+ ret = strtol (str, &endptr, 10);
TEST_COMPARE (errno, 0);
TEST_VERIFY (ret >= 0 && ret <= INT_MAX);
return ret;
DJ, I looked over the whole tree, and I only found on occurance of TEST_COMPARE (errno, 0); (and some variants) where we forgot to set errno to zero. Likewise in test-container.c we have an instance of strtol which doesn't check error returns. I've put these together in one patch to make testing easier. It fixes both cases, the missing check, and the potentially broken check (depends on what gets called before parse_int()). OK for master? 8< --- 8< --- 8< From 0adf117887d13925d9a00be1a0abd07ded6adfce Mon Sep 17 00:00:00 2001 From: Carlos O'Donell <carlos@redhat.com> Date: Wed, 29 Apr 2020 16:31:29 -0400 Subject: [PATCH] support: Set errno before testing it. In test-conainer we should set errno to 0 before calling chmod, and check after with TEST_COMPARE. In tst-support_capture_subprocess we should set errno to 0 before checking it after the call to strtol. Tested on x86_64. --- support/test-container.c | 2 ++ support/tst-support_capture_subprocess.c | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-)