Piotr Caban : shlwapi: Don' t crash in PathStripPath when read-only string is passed and it' s not modified.
Module: wine Branch: master Commit: 31c49c2851d7557271dbf44a6c9239c6bcc24d67 URL: http://source.winehq.org/git/wine.git/?a=commit;h=31c49c2851d7557271dbf44a6c... Author: Piotr Caban <piotr(a)codeweavers.com> Date: Wed Oct 28 20:05:12 2015 +0100 shlwapi: Don't crash in PathStripPath when read-only string is passed and it's not modified. Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/shlwapi/path.c | 4 ++-- dlls/shlwapi/tests/path.c | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/dlls/shlwapi/path.c b/dlls/shlwapi/path.c index dae949a..3c07bb8 100644 --- a/dlls/shlwapi/path.c +++ b/dlls/shlwapi/path.c @@ -661,7 +661,7 @@ void WINAPI PathStripPathA(LPSTR lpszPath) if (lpszPath) { LPSTR lpszFileName = PathFindFileNameA(lpszPath); - if(lpszFileName) + if(lpszFileName != lpszPath) RtlMoveMemory(lpszPath, lpszFileName, strlen(lpszFileName)+1); } } @@ -677,7 +677,7 @@ void WINAPI PathStripPathW(LPWSTR lpszPath) TRACE("(%s)\n", debugstr_w(lpszPath)); lpszFileName = PathFindFileNameW(lpszPath); - if(lpszFileName) + if(lpszFileName != lpszPath) RtlMoveMemory(lpszPath, lpszFileName, (strlenW(lpszFileName)+1)*sizeof(WCHAR)); } diff --git a/dlls/shlwapi/tests/path.c b/dlls/shlwapi/tests/path.c index ab4ae47..03079a3 100644 --- a/dlls/shlwapi/tests/path.c +++ b/dlls/shlwapi/tests/path.c @@ -1639,6 +1639,19 @@ static void test_PathIsRelativeW(void) } } +static void test_PathStripPathA(void) +{ + const char const_path[] = "test"; + char path[] = "short//path\\file.txt"; + + PathStripPathA(path); + ok(!strcmp(path, "file.txt"), "path = %s\n", path); + + /* following test should not crash */ + /* LavView 2013 depends on that behaviour */ + PathStripPathA((char*)const_path); +} + START_TEST(path) { HMODULE hShlwapi = GetModuleHandleA("shlwapi.dll"); @@ -1684,4 +1697,5 @@ START_TEST(path) test_PathUnExpandEnvStrings(); test_PathIsRelativeA(); test_PathIsRelativeW(); + test_PathStripPathA(); }
participants (1)
-
Alexandre Julliard