summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bstr.h6
-rw-r--r--m_option.c6
2 files changed, 9 insertions, 3 deletions
diff --git a/bstr.h b/bstr.h
index b3f942535e..99b7eea578 100644
--- a/bstr.h
+++ b/bstr.h
@@ -36,14 +36,18 @@ struct bstr {
// demux_rtp.cpp (live555) C++ compilation workaround
#ifndef __cplusplus
+// If str.start is NULL, return NULL.
static inline char *bstrdup0(void *talloc_ctx, struct bstr str)
{
return talloc_strndup(talloc_ctx, (char *)str.start, str.len);
}
+// Return start = NULL iff that is true for the original.
static inline struct bstr bstrdup(void *talloc_ctx, struct bstr str)
{
- struct bstr r = { talloc_strndup(talloc_ctx, str.start, str.len), str.len };
+ struct bstr r = { NULL, str.len };
+ if (str.start)
+ r.start = talloc_memdup(talloc_ctx, str.start, str.len);
return r;
}
diff --git a/m_option.c b/m_option.c
index 23343c73a6..18f94dc7a9 100644
--- a/m_option.c
+++ b/m_option.c
@@ -458,6 +458,9 @@ static int parse_str(const m_option_t *opt, struct bstr name,
struct bstr param, bool ambiguous_param, void *dst,
void *talloc_ctx)
{
+ if (param.start == NULL)
+ return M_OPT_MISSING_PARAM;
+
if ((opt->flags & M_OPT_MIN) && (param.len < opt->min)) {
mp_msg(MSGT_CFGPARSER, MSGL_ERR,
"Parameter must be >= %d chars: %.*s\n",
@@ -891,8 +894,7 @@ static int parse_subconf(const m_option_t *opt, struct bstr name,
if (dst) {
lst = talloc_realloc(NULL, lst, char *, 2 * (nr + 2));
lst[2 * nr] = bstrdup0(lst, subopt);
- lst[2 * nr + 1] = subparam.len == 0 ? NULL :
- bstrdup0(lst, subparam);
+ lst[2 * nr + 1] = bstrdup0(lst, subparam);
memset(&lst[2 * (nr + 1)], 0, 2 * sizeof(char *));
nr++;
}