summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libmount/src/optstr.c4
-rw-r--r--sys-utils/mount.c2
2 files changed, 4 insertions, 2 deletions
diff --git a/libmount/src/optstr.c b/libmount/src/optstr.c
index 5e9e70807..3c680ff6e 100644
--- a/libmount/src/optstr.c
+++ b/libmount/src/optstr.c
@@ -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 =
diff --git a/sys-utils/mount.c b/sys-utils/mount.c
index 8ff94611c..0998b0110 100644
--- a/sys-utils/mount.c
+++ b/sys-utils/mount.c
@@ -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);
}