|
Message-ID: <20220514042409.GO7074@brightrain.aerifal.cx> Date: Sat, 14 May 2022 00:24:09 -0400 From: Rich Felker <dalias@...c.org> To: Oliver Ford <ojford@...il.com> Cc: musl@...ts.openwall.com Subject: Re: [PATCH musl v2 3/3] mntent: fix parsing lines with optional fields On Fri, May 13, 2022 at 10:39:17PM +0100, Oliver Ford wrote: > On Thu, May 12, 2022 at 10:10 PM Rich Felker <dalias@...c.org> wrote: > > This fails to check that the match is at the start of an option > > (preceded by a ',' or at the beginning of string) and fails to > > continue if the first match is a false positive (e.g. "ro" in > > "symlinkroot,ro"). It's possible to solve this still using strstr in a > > loop, but it might be easier to just iterate delimiters and strcmp. > > > > Also, I'm not sure if hasmntopt is supposed to return a match or not > > for something like "uid" in "uid=1001"; if so, being followed by '=' > > also needs to be considered valid match. > > > > Rich > > Comparing glibc and bionic, they both match when followed by an '='. > So the below function handles that, and replaces strstr with an > strncmp and a loop. If this version is ok I'll submit a patch? > > char *hasmntopt(const struct mntent *mnt, const char *opt) > { > char *ptr = mnt->mnt_opts; > size_t len = strlen(opt); > > while (ptr) { > char *end = ptr + len; This has UB unless ptr points to at least len bytes. You can only evaluate ptr+len or ptr[len] after confirming that. The strncmp is the most natural (and free) way of confirming it. You could assign end after the strncmp but I think just using ptr[len] instead of *end makes it easier. > if (!strncmp(ptr, opt, len) && > (*end == '\0' || *end == ',' || *end == '=')) return ptr; > ptr = strchr(ptr, ','); > if (ptr) ptr++; > } > > return NULL; Minor style nit: NULL is generally not used in musl anymore; just 0 is fine here. BTW you dropped the list from CC; I re-added it. Rich
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.