diff options
author | James Ross-Gowan <rossymiles@gmail.com> | 2014-10-07 15:42:30 +1100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2014-10-07 08:45:27 +0200 |
commit | 476fc65b0fda4fed099ee31b04b926d27e9a5f28 (patch) | |
tree | 0561f91a9861da9111f42bc51f98449a52d83237 /misc | |
parent | ec7bc388d1d87c5a2d64dde85628d49e25a9f8fd (diff) | |
download | mpv-476fc65b0fda4fed099ee31b04b926d27e9a5f28.tar.bz2 mpv-476fc65b0fda4fed099ee31b04b926d27e9a5f28.tar.xz |
bstr: check strings before memcmp/strncasecmp
bstr.start can be NULL when bstr.len is 0, so don't call memcmp or
strncasecmp if that's the case. Passing NULL to string functions is
invalid C, even when the length is 0, and it causes Windows to raise an
invalid parameter error.
Should fix #1155
Diffstat (limited to 'misc')
-rw-r--r-- | misc/bstr.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/misc/bstr.c b/misc/bstr.c index a6268b4d53..7a5a1a1270 100644 --- a/misc/bstr.c +++ b/misc/bstr.c @@ -33,7 +33,9 @@ int bstrcmp(struct bstr str1, struct bstr str2) { - int ret = memcmp(str1.start, str2.start, FFMIN(str1.len, str2.len)); + int ret = 0; + if (str1.len && str2.len) + ret = memcmp(str1.start, str2.start, FFMIN(str1.len, str2.len)); if (!ret) { if (str1.len == str2.len) @@ -48,7 +50,9 @@ int bstrcmp(struct bstr str1, struct bstr str2) int bstrcasecmp(struct bstr str1, struct bstr str2) { - int ret = strncasecmp(str1.start, str2.start, FFMIN(str1.len, str2.len)); + int ret = 0; + if (str1.len && str2.len) + ret = strncasecmp(str1.start, str2.start, FFMIN(str1.len, str2.len)); if (!ret) { if (str1.len == str2.len) |