libmount: more robust options string parsing
# mount -o=rw /dev/sdb /mnt/test mount: libmount/src/optmap.c:212: mnt_optmap_get_entry: Assertion `namelen' failed. Aborted (core dumped) Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=968786 Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
parent
3e5c0a2db2
commit
8225bb78a6
|
@ -77,7 +77,7 @@ static int mnt_optstr_parse_next(char **optstr, char **name, size_t *namesz,
|
|||
open_quote ^= 1; /* reverse the status */
|
||||
if (open_quote)
|
||||
continue; /* still in quoted block */
|
||||
if (!sep && *p == '=')
|
||||
if (!sep && p > start && *p == '=')
|
||||
sep = p; /* name and value separator */
|
||||
if (*p == ',')
|
||||
stop = p; /* terminate the option item */
|
||||
|
@ -540,7 +540,7 @@ int mnt_split_optstr(const char *optstr, char **user, char **vfs,
|
|||
if (user)
|
||||
*user = NULL;
|
||||
|
||||
while(!mnt_optstr_next_option(&str, &name, &namesz, &val, &valsz)) {
|
||||
while (!mnt_optstr_next_option(&str, &name, &namesz, &val, &valsz)) {
|
||||
int rc = 0;
|
||||
const struct libmnt_optmap *ent = NULL;
|
||||
const struct libmnt_optmap *m =
|
||||
|
|
|
@ -682,6 +682,8 @@ static void sanitize_paths(struct libmnt_context *cxt)
|
|||
|
||||
static void append_option(struct libmnt_context *cxt, const char *opt)
|
||||
{
|
||||
if (opt && (*opt == '=' || *opt == '\'' || *opt == '\"' || isblank(*opt)))
|
||||
errx(MOUNT_EX_USAGE, _("unsupported option format: %s"), opt);
|
||||
if (mnt_context_append_options(cxt, opt))
|
||||
err(MOUNT_EX_SYSERR, _("failed to append option '%s'"), opt);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue