aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Browet <koying@users.noreply.github.com>2017-10-29 14:15:30 +0100
committerGitHub <noreply@github.com>2017-10-29 14:15:30 +0100
commitcbd11f10db2c1d5ef694d9439ede43092c564825 (patch)
tree8c802ffea6c14446e361acfd3a168e36138a857d
parente46d91849a9065036096dbaa67b28c14b9bf4e34 (diff)
parent03c421d8e2ca845d22332bfa277e38b03ce2779c (diff)
Merge pull request #12962 from koying/fix17627
FIX: Only remove options for actual URL in URIUtils::Split (fixes #17627)
-rw-r--r--xbmc/utils/URIUtils.cpp19
-rw-r--r--xbmc/utils/test/TestURIUtils.cpp10
2 files changed, 20 insertions, 9 deletions
diff --git a/xbmc/utils/URIUtils.cpp b/xbmc/utils/URIUtils.cpp
index 7153beb719..faefd5d38c 100644
--- a/xbmc/utils/URIUtils.cpp
+++ b/xbmc/utils/URIUtils.cpp
@@ -218,16 +218,19 @@ void URIUtils::Split(const std::string& strFileNameAndPath,
// everything to the right of the directory separator
strFileName = strFileNameAndPath.substr(i+1);
- // ignore options
- i = strFileName.size() - 1;
- while (i > 0)
+ // if actual uri, ignore options
+ if (IsURL(strFileNameAndPath))
{
- char ch = strFileName[i];
- if (ch == '?') break;
- else i--;
+ i = strFileName.size() - 1;
+ while (i > 0)
+ {
+ char ch = strFileName[i];
+ if (ch == '?') break;
+ else i--;
+ }
+ if (i > 0)
+ strFileName = strFileName.substr(0, i);
}
- if (i > 0)
- strFileName = strFileName.substr(0, i);
}
std::vector<std::string> URIUtils::SplitPath(const std::string& strPath)
diff --git a/xbmc/utils/test/TestURIUtils.cpp b/xbmc/utils/test/TestURIUtils.cpp
index 72be4563f4..7902aa108b 100644
--- a/xbmc/utils/test/TestURIUtils.cpp
+++ b/xbmc/utils/test/TestURIUtils.cpp
@@ -124,7 +124,15 @@ TEST_F(TestURIUtils, Split)
std::string varpathOptional, varfileOptional;
- URIUtils::Split("/path/to/movie.avi?showinfo=true", varpathOptional, varfileOptional);
+ refpath = "/path/to/";
+ reffile = "movie?movie.avi";
+ URIUtils::Split("/path/to/movie?movie.avi", varpathOptional, varfileOptional);
+ EXPECT_STREQ(refpath.c_str(), varpathOptional.c_str());
+ EXPECT_STREQ(reffile.c_str(), varfileOptional.c_str());
+
+ refpath = "file:///path/to/";
+ reffile = "movie.avi";
+ URIUtils::Split("file:///path/to/movie.avi?showinfo=true", varpathOptional, varfileOptional);
EXPECT_STREQ(refpath.c_str(), varpathOptional.c_str());
EXPECT_STREQ(reffile.c_str(), varfileOptional.c_str());
}