diff options
-rw-r--r-- | bstr.h | 6 | ||||
-rw-r--r-- | m_option.c | 6 |
2 files changed, 9 insertions, 3 deletions
@@ -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++; } |