Pārlūkot izejas kodu

hasmntopt: match only whole options not arbitrary substrings

the man page for this nonstandardized function has historically
documented it as scanning for a substring; however, this is
functionally incorrect (matches the substring "atime" in the "noatime"
option, for example) and differs from other existing implementations.

with the change made here, it should match glibc and other
implementations, only matching whole options delimited by commas or
separated from a value by an equals sign.
Rich Felker 1 mēnesi atpakaļ
vecāks
revīzija
4c4f15dae5
1 mainītis faili ar 9 papildinājumiem un 1 dzēšanām
  1. 9 1
      src/misc/mntent.c

+ 9 - 1
src/misc/mntent.c

@@ -115,5 +115,13 @@ int addmntent(FILE *f, const struct mntent *mnt)
 
 char *hasmntopt(const struct mntent *mnt, const char *opt)
 {
-	return strstr(mnt->mnt_opts, opt);
+	size_t l = strlen(opt);
+	char *p = mnt->mnt_opts;
+	for (;;) {
+		if (!strncmp(p, opt, l) && (!p[l] || p[l]==',' || p[l]=='='))
+			return p;
+		p = strchr(p, ',');
+		if (!p) return 0;
+		p++;
+	}
 }