Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mpc-hc/LAVFilters.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorHendrik Leppkes <h.leppkes@gmail.com>2014-05-17 17:02:11 +0400
committerHendrik Leppkes <h.leppkes@gmail.com>2014-05-17 17:02:11 +0400
commit836874f9d44011de1bc8427d24bdba725db53ca3 (patch)
tree995f1943147d63155fa94d33c7c37499cbc7907e /common
parent4e07f66d26c4e8a6f392378f5009016607dac752 (diff)
Fix safe conversions functions in the case of too long inputs
Diffstat (limited to 'common')
-rw-r--r--common/DSUtilLite/DShowUtil.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/common/DSUtilLite/DShowUtil.cpp b/common/DSUtilLite/DShowUtil.cpp
index b69f70a2..8d39c716 100644
--- a/common/DSUtilLite/DShowUtil.cpp
+++ b/common/DSUtilLite/DShowUtil.cpp
@@ -188,8 +188,12 @@ std::wstring WStringFromGUID(const GUID& guid)
int SafeMultiByteToWideChar(UINT CodePage, DWORD dwFlags, LPCSTR lpMultiByteStr, int cbMultiByte, LPWSTR lpWideCharStr, int cchWideChar)
{
int len = MultiByteToWideChar(CodePage, dwFlags, lpMultiByteStr, cbMultiByte, lpWideCharStr, cchWideChar);
- if (len == cchWideChar) {
- lpWideCharStr[len - 1] = 0;
+ if (cchWideChar) {
+ if (len == cchWideChar || (len == 0 && GetLastError() == ERROR_INSUFFICIENT_BUFFER)) {
+ lpWideCharStr[cchWideChar - 1] = 0;
+ } else if (len == 0) {
+ lpWideCharStr[0] = 0;
+ }
}
return len;
}
@@ -197,8 +201,12 @@ int SafeMultiByteToWideChar(UINT CodePage, DWORD dwFlags, LPCSTR lpMultiByteStr,
int SafeWideCharToMultiByte(UINT CodePage, DWORD dwFlags, LPCWSTR lpWideCharStr, int cchWideChar, LPSTR lpMultiByteStr, int cbMultiByte, LPCSTR lpDefaultChar, LPBOOL lpUsedDefaultChar)
{
int len = WideCharToMultiByte(CodePage, dwFlags, lpWideCharStr, cchWideChar, lpMultiByteStr, cbMultiByte, lpDefaultChar, lpUsedDefaultChar);
- if (len == cbMultiByte) {
- lpMultiByteStr[len - 1] = 0;
+ if (cbMultiByte) {
+ if (len == cbMultiByte || (len == 0 && GetLastError() == ERROR_INSUFFICIENT_BUFFER)) {
+ lpMultiByteStr[cbMultiByte - 1] = 0;
+ } else if (len == 0) {
+ lpMultiByteStr[0] = 0;
+ }
}
return len;
}