[BZ,17273] fix incorrect mount table entry parsing in __getmntent_r()

Message ID 54014DDC.7090005@ya.ru
State Superseded
Headers

Commit Message

Vladimir A. Nazarenko Aug. 30, 2014, 4:06 a.m. UTC
  On 30.08.2014 08:58, Roland McGrath wrote:
> Please write a test case.
> 
Can I modify existing test or I must create new one? Is following patch OK?
Can I resend fixed patch and test case as *one* patch?
> 
> This should look like:
> 
how about that:

	[BZ #17273]
	* misc/mntent_r.c (__getmntent_r): cut off trailing spaces
	and tabs from bufer before parsing fstab entry.
	* misc/tst-mntent.c(main): add test for mount entry with 
	trailing spaces and tabs.

---
  

Comments

Roland McGrath Oct. 1, 2014, 9:09 p.m. UTC | #1
> On 30.08.2014 08:58, Roland McGrath wrote:
> > Please write a test case.
> > 
> Can I modify existing test or I must create new one? Is following patch OK?

If it is substantially simpler to modify an existing test, that is the
right thing to do.

> Can I resend fixed patch and test case as *one* patch?

Yes, that is always the right way to do it.  That way when you say that
you've run 'make check' and seen no regressions (on some particular
configuration, which you should cite--saying that and having it be true is
a necessary part of submitting any substantive change), that constitutes
testing for the newly-fixed case too.

> 	[BZ #17273]
> 	* misc/mntent_r.c (__getmntent_r): cut off trailing spaces
> 	and tabs from bufer before parsing fstab entry.

Capitalize sentences.

> 	* misc/tst-mntent.c(main): add test for mount entry with 
> 	trailing spaces and tabs.

Space before that paren.

> +       /*part III: test if entry with trailing whitespaces*/

Comments need proper grammar, capitalization, punctuation, and space usage.
Follow the existing examples.

> +      fputs("/foo\\040dir /bar\\040dir auto bind \t \n", fp);

Space before paren.

> +      mnt = getmntent(fp);
> +      mnt = getmntent(fp);

Space before paren.  Did you really mean to call it twice?

> +      if (mnt->mnt_freq != 0 || mnt->mnt_passno != 0)

Check all the fields like the existing case does.

> +	{
> +	  printf("Error mnt_freq = %d and mnt_opts = %d, but zero expected\n",
> +			  mnt->mnt_freq, mnt->mnt_passno);
> +          result = 1;
> +	}

Space before paren.  The second line of the block should be intended the
same as the first, and use a tab for the leading 8 spaces as the first line
does.
  

Patch

diff --git a/misc/tst-mntent.c b/misc/tst-mntent.c
index 802b56e..f568ba8 100644
--- a/misc/tst-mntent.c
+++ b/misc/tst-mntent.c
@@ -73,7 +73,21 @@  main (int argc, char *argv[])
 	  puts ("Error while reading written entry back in");
 	  result = 1;
 	}
-    }
+
+       /*part III: test if entry with trailing whitespaces*/
+      fputs("/foo\\040dir /bar\\040dir auto bind \t \n", fp);
+
+      rewind (fp);
+      
+      mnt = getmntent(fp);
+      mnt = getmntent(fp);
+      if (mnt->mnt_freq != 0 || mnt->mnt_passno != 0)
+	{
+	  printf("Error mnt_freq = %d and mnt_opts = %d, but zero expected\n",
+			  mnt->mnt_freq, mnt->mnt_passno);
+          result = 1;
+	}
+   }
 
   return result;
 }