libbluray | branch: master | hpi1 <h...@anonymous.org> | Sat Aug 6 22:36:32 2016 +0300| [20a46d7f5338501e55be068072b1c0dd67c80fd6] | committer: hpi1
dl_win32: add error checks > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=20a46d7f5338501e55be068072b1c0dd67c80fd6 --- src/file/dl_win32.c | 39 +++++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/src/file/dl_win32.c b/src/file/dl_win32.c index e4492e1..c73859d 100644 --- a/src/file/dl_win32.c +++ b/src/file/dl_win32.c @@ -37,12 +37,12 @@ static const char *dlerror(char *buf, int buf_size) DWORD error_code = GetLastError(); wchar_t wbuf[256]; - if (FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | - FORMAT_MESSAGE_MAX_WIDTH_MASK, - NULL, error_code, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - wbuf, sizeof(wbuf)/sizeof(wbuf[0]), NULL)) { - WideCharToMultiByte(CP_UTF8, 0, wbuf, -1, buf, buf_size, NULL, NULL); - } else { + if (!FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | + FORMAT_MESSAGE_MAX_WIDTH_MASK, + NULL, error_code, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + wbuf, sizeof(wbuf)/sizeof(wbuf[0]), NULL) || + !WideCharToMultiByte(CP_UTF8, 0, wbuf, -1, buf, buf_size, NULL, NULL)) { + #ifdef _MSC_VER _snprintf(buf, buf_size, "error %d", (int)error_code); #else @@ -60,6 +60,7 @@ void *dl_dlopen(const char *path, const char *version) wchar_t wname[MAX_PATH]; char *name; void *result; + int iresult; name = str_printf("%s.dll", path); if (!name) { @@ -67,9 +68,14 @@ void *dl_dlopen(const char *path, const char *version) return NULL; } - MultiByteToWideChar(CP_UTF8, 0, name, -1, wname, MAX_PATH); + iresult = MultiByteToWideChar(CP_UTF8, 0, name, -1, wname, MAX_PATH); X_FREE(name); + if (!iresult) { + BD_DEBUG(DBG_FILE, "can't convert file name '%s'\n", path); + return NULL; + } + result = LoadLibraryW(wname); if (!result) { @@ -113,10 +119,19 @@ const char *dl_get_path(void) HMODULE hModule; wchar_t wpath[MAX_PATH]; - GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCTSTR)&dl_get_path, &hModule); - GetModuleFileNameW(hModule, wpath, MAX_PATH); - WideCharToMultiByte(CP_UTF8, 0, wpath, -1, path, MAX_PATH, NULL, NULL); - lib_path = path; + if (GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | + GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, + (LPCTSTR)&dl_get_path, &hModule)) { + + DWORD dw = GetModuleFileNameW(hModule, wpath, MAX_PATH); + if (dw > 0 && dw < MAX_PATH) { + + if (WideCharToMultiByte(CP_UTF8, 0, wpath, -1, path, MAX_PATH, NULL, NULL)) { + + lib_path = path; + } + } + } if (lib_path) { /* cut library name from path */ @@ -126,7 +141,7 @@ const char *dl_get_path(void) } BD_DEBUG(DBG_FILE, "library file is %s\n", lib_path); } else { - BD_DEBUG(DBG_FILE, "Can't determine libbluray.dll install path\n"); + BD_DEBUG(DBG_FILE | DBG_CRIT, "Can't determine libbluray.dll install path\n"); } } _______________________________________________ libbluray-devel mailing list libbluray-devel@videolan.org https://mailman.videolan.org/listinfo/libbluray-devel