Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAGMVOdtX2pw9CeOEmgcqv65zX8q5bC+K5tA8XtHS2X9Zr5wkUA@mail.gmail.com>
Date: Fri, 13 May 2022 22:39:17 +0100
From: Oliver Ford <ojford@...il.com>
To: Rich Felker <dalias@...c.org>
Cc: musl@...ts.openwall.com
Subject: Re: [PATCH musl v2 3/3] mntent: fix parsing lines with
 optional fields

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;
        if (!strncmp(ptr, opt, len) &&
                 (*end == '\0' || *end == ',' || *end == '=')) return ptr;
        ptr = strchr(ptr, ',');
        if (ptr) ptr++;
    }

    return NULL;
}

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.