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
diff options
context:
space:
mode:
authorHendrik Leppkes <h.leppkes@gmail.com>2014-05-12 18:29:55 +0400
committerHendrik Leppkes <h.leppkes@gmail.com>2014-05-12 18:29:55 +0400
commitc9b42a87ec01b0a8835047ab236c230a51b24e68 (patch)
tree2c72b57fe26fc5f7fb3316a570e07f3effa95183 /demuxer
parent465bd2f3a2f951885c2fc816c062c24ae1c0322c (diff)
Check all uses of MultiByteToWideChar and WideCharToMultiByte
Fixes issue 452.
Diffstat (limited to 'demuxer')
-rw-r--r--demuxer/Demuxers/BDDemuxer.cpp4
-rw-r--r--demuxer/Demuxers/LAVFDemuxer.cpp8
-rw-r--r--demuxer/Demuxers/LAVFStreamInfo.cpp2
-rw-r--r--demuxer/LAVSplitter/LAVSplitter.cpp30
4 files changed, 15 insertions, 29 deletions
diff --git a/demuxer/Demuxers/BDDemuxer.cpp b/demuxer/Demuxers/BDDemuxer.cpp
index 0e439816..be8e78a0 100644
--- a/demuxer/Demuxers/BDDemuxer.cpp
+++ b/demuxer/Demuxers/BDDemuxer.cpp
@@ -96,7 +96,7 @@ static void bd_log(const char *log) {
if (log[len-1] == '\n') {
len--;
}
- MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, log, (int)len, line, 4096);
+ SafeMultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, log, (int)len, line, 4096);
DbgLog((LOG_TRACE, 40, L"[BD] %s", line));
}
#endif
@@ -161,7 +161,7 @@ STDMETHODIMP CBDDemuxer::Open(LPCOLESTR pszFileName)
// Convert the filename from wchar to char for libbluray
char fileName[4096];
- ret = WideCharToMultiByte(CP_UTF8, 0, pszFileName, -1, fileName, 4096, nullptr, nullptr);
+ ret = SafeWideCharToMultiByte(CP_UTF8, 0, pszFileName, -1, fileName, 4096, nullptr, nullptr);
int iPlaylist = -1;
diff --git a/demuxer/Demuxers/LAVFDemuxer.cpp b/demuxer/Demuxers/LAVFDemuxer.cpp
index 3d08905f..74b51390 100644
--- a/demuxer/Demuxers/LAVFDemuxer.cpp
+++ b/demuxer/Demuxers/LAVFDemuxer.cpp
@@ -191,7 +191,7 @@ STDMETHODIMP CLAVFDemuxer::OpenInputStream(AVIOContext *byteContext, LPCOLESTR p
// Convert the filename from wchar to char for avformat
char fileName[4100] = {0};
if (pszFileName) {
- ret = WideCharToMultiByte(CP_UTF8, 0, pszFileName, -1, fileName, 4096, nullptr, nullptr);
+ ret = SafeWideCharToMultiByte(CP_UTF8, 0, pszFileName, -1, fileName, 4096, nullptr, nullptr);
}
if (_strnicmp("mms:", fileName, 4) == 0) {
@@ -684,9 +684,7 @@ STDMETHODIMP CLAVFDemuxer::GetTitleInfo(int idx, REFERENCE_TIME *rtDuration, WCH
} else {
title = av_asprintf("E: Edition %d [%02d:%02d:%02d]", idx+1, hours, minutes, seconds);
}
- size_t len = strlen(title);
- *ppszName = (WCHAR *)CoTaskMemAlloc(sizeof(WCHAR) * (len + 1));
- MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, title, -1, *ppszName, len+1);
+ *ppszName = CoTaskGetWideCharFromMultiByte(CP_UTF8, MB_ERR_INVALID_CHARS, title, -1);
av_freep(&title);
}
return S_OK;
@@ -1265,7 +1263,7 @@ STDMETHODIMP CLAVFDemuxer::GetMarkerName(long MarkerNum, BSTR* pbstrMarkerName)
OLECHAR wTitle[128];
if (AVDictionaryEntry *dictEntry = av_dict_get(m_avFormat->chapters[index]->metadata, "title", nullptr, 0)) {
char *title = dictEntry->value;
- MultiByteToWideChar(CP_UTF8, 0, title, -1, wTitle, 128);
+ SafeMultiByteToWideChar(CP_UTF8, 0, title, -1, wTitle, 128);
} else {
swprintf_s(wTitle, L"Chapter %d", MarkerNum);
}
diff --git a/demuxer/Demuxers/LAVFStreamInfo.cpp b/demuxer/Demuxers/LAVFStreamInfo.cpp
index 0c4d4b52..3e385909 100644
--- a/demuxer/Demuxers/LAVFStreamInfo.cpp
+++ b/demuxer/Demuxers/LAVFStreamInfo.cpp
@@ -451,7 +451,7 @@ STDMETHODIMP CLAVFStreamInfo::CreateSubtitleMediaType(AVFormatContext *avctx, AV
// read metadata
char *title = dictEntry->value;
// convert to wchar
- MultiByteToWideChar(CP_UTF8, 0, title, -1, subInfo->TrackName, 256);
+ SafeMultiByteToWideChar(CP_UTF8, 0, title, -1, subInfo->TrackName, 256);
}
subInfo->dwOffset = sizeof(SUBTITLEINFO);
diff --git a/demuxer/LAVSplitter/LAVSplitter.cpp b/demuxer/LAVSplitter/LAVSplitter.cpp
index 6340e86d..d28de250 100644
--- a/demuxer/LAVSplitter/LAVSplitter.cpp
+++ b/demuxer/LAVSplitter/LAVSplitter.cpp
@@ -237,7 +237,7 @@ STDMETHODIMP CLAVSplitter::ReadSettings(HKEY rootKey)
if (SUCCEEDED(hr)) {
WCHAR wBuffer[80];
for (const FormatInfo& fmt : m_InputFormats) {
- MultiByteToWideChar(CP_UTF8, 0, fmt.strName, -1, wBuffer, 80);
+ SafeMultiByteToWideChar(CP_UTF8, 0, fmt.strName, -1, wBuffer, 80);
bFlag = regF.ReadBOOL(wBuffer, hr);
if (SUCCEEDED(hr)) m_settings.formats[std::string(fmt.strName)] = bFlag;
}
@@ -280,7 +280,7 @@ STDMETHODIMP CLAVSplitter::SaveSettings()
if (SUCCEEDED(hr)) {
WCHAR wBuffer[80];
for (const FormatInfo& fmt : m_InputFormats) {
- MultiByteToWideChar(CP_UTF8, 0, fmt.strName, -1, wBuffer, 80);
+ SafeMultiByteToWideChar(CP_UTF8, 0, fmt.strName, -1, wBuffer, 80);
regF.WriteBOOL(wBuffer, m_settings.formats[std::string(fmt.strName)]);
}
}
@@ -1368,10 +1368,7 @@ STDMETHODIMP CLAVSplitter::Info(long lIndex, AM_MEDIA_TYPE **ppmt, DWORD *pdwFla
}
if (ppszName) {
std::string info = s.streamInfo->codecInfo;
- size_t len = info.size() + 1;
- *ppszName = (WCHAR*)CoTaskMemAlloc(len * sizeof(WCHAR));
- if (*ppszName)
- MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, info.c_str(), -1, *ppszName, (int)len);
+ *ppszName = CoTaskGetWideCharFromMultiByte(CP_UTF8, MB_ERR_INVALID_CHARS, info.c_str(), -1);
}
}
hr = S_OK;
@@ -1403,15 +1400,12 @@ std::list<std::string> CLAVSplitter::GetPreferredAudioLanguageList()
{
std::list<std::string> list;
- // Convert to multi-byte ascii
- int bufSize = (int)(sizeof(WCHAR) * (m_settings.prefAudioLangs.length() + 1));
- char *buffer = (char *)CoTaskMemAlloc(bufSize);
+ char *buffer = CoTaskGetMultiByteFromWideChar(CP_UTF8, 0, m_settings.prefAudioLangs.c_str(), -1);
if (!buffer)
return list;
- WideCharToMultiByte(CP_UTF8, 0, m_settings.prefAudioLangs.c_str(), -1, buffer, bufSize, nullptr, nullptr);
split(std::string(buffer), std::string(",; "), list);
- CoTaskMemFree(buffer);
+ SAFE_CO_FREE(buffer);
return list;
}
@@ -1426,13 +1420,10 @@ std::list<CSubtitleSelector> CLAVSplitter::GetSubtitleSelectors()
if (m_settings.subtitleMode == LAVSubtitleMode_NoSubs) {
// Do nothing
} else if (m_settings.subtitleMode == LAVSubtitleMode_Default || m_settings.subtitleMode == LAVSubtitleMode_ForcedOnly) {
- // Convert to multi-byte ascii
- size_t bufSize = sizeof(WCHAR) * (m_settings.prefSubLangs.length() + 1);
- char *buffer = (char *)CoTaskMemAlloc(bufSize);
+ // Convert to wide-char to utf8
+ char *buffer = CoTaskGetMultiByteFromWideChar(CP_UTF8, 0, m_settings.prefSubLangs.c_str(), -1);
if (!buffer)
return selectorList;
- ZeroMemory(buffer, bufSize);
- WideCharToMultiByte(CP_UTF8, 0, m_settings.prefSubLangs.c_str(), -1, buffer, (int)bufSize, nullptr, nullptr);
std::list<std::string> langList;
split(std::string(buffer), separators, langList);
@@ -1462,13 +1453,10 @@ std::list<CSubtitleSelector> CLAVSplitter::GetSubtitleSelectors()
if (m_settings.subtitleMode == LAVSubtitleMode_Default)
tokenList.push_back("*:*|d");
} else if (m_settings.subtitleMode == LAVSubtitleMode_Advanced) {
- // Convert to multi-byte ascii
- size_t bufSize = sizeof(WCHAR) * (m_settings.subtitleAdvanced.length() + 1);
- char *buffer = (char *)CoTaskMemAlloc(bufSize);
+ // Convert to wide-char to utf8
+ char *buffer = CoTaskGetMultiByteFromWideChar(CP_UTF8, 0, m_settings.subtitleAdvanced.c_str(), -1);
if (!buffer)
return selectorList;
- ZeroMemory(buffer, bufSize);
- WideCharToMultiByte(CP_UTF8, 0, m_settings.subtitleAdvanced.c_str(), -1, buffer, (int)bufSize, nullptr, nullptr);
split(std::string(buffer), separators, tokenList);
SAFE_CO_FREE(buffer);