[libbluray-devel] bdj: check charset conversions
hpi1
git at videolan.org
Sun Aug 7 16:08:29 CEST 2016
libbluray | branch: master | hpi1 <hpi1 at anonymous.org> | Sun Aug 7 13:11:21 2016 +0300| [9aea5f92bb367ebad4292988d33b94cbb7877101] | committer: hpi1
bdj: check charset conversions
> http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=9aea5f92bb367ebad4292988d33b94cbb7877101
---
src/libbluray/bdj/bdj.c | 34 ++++++++++++++++++++++++----------
1 file changed, 24 insertions(+), 10 deletions(-)
diff --git a/src/libbluray/bdj/bdj.c b/src/libbluray/bdj/bdj.c
index 87ce53a..5287a75 100644
--- a/src/libbluray/bdj/bdj.c
+++ b/src/libbluray/bdj/bdj.c
@@ -87,7 +87,9 @@ static void *_load_jvm_win32(const char **p_java_home)
}
if (debug_mask & DBG_BDJ) {
- WideCharToMultiByte(CP_UTF8, 0, buf_vers, -1, strbuf, sizeof(strbuf), NULL, NULL);
+ if (!WideCharToMultiByte(CP_UTF8, 0, buf_vers, -1, strbuf, sizeof(strbuf), NULL, NULL)) {
+ strbuf[0] = 0;
+ }
BD_DEBUG(DBG_BDJ, "JRE version: %s\n", strbuf);
}
wcscat(buf_loc, buf_vers);
@@ -103,8 +105,9 @@ static void *_load_jvm_win32(const char **p_java_home)
if (r == ERROR_SUCCESS) {
/* do not fail even if not found */
- WideCharToMultiByte(CP_UTF8, 0, buf_loc, -1, java_home, sizeof(java_home), NULL, NULL);
- *p_java_home = java_home;
+ if (WideCharToMultiByte(CP_UTF8, 0, buf_loc, -1, java_home, sizeof(java_home), NULL, NULL)) {
+ *p_java_home = java_home;
+ }
BD_DEBUG(DBG_BDJ, "JavaHome: %s\n", java_home);
wcscat(java_path, buf_loc);
@@ -124,7 +127,9 @@ static void *_load_jvm_win32(const char **p_java_home)
void *result = LoadLibraryW(buf_loc);
SetDllDirectoryW(NULL);
- WideCharToMultiByte(CP_UTF8, 0, buf_loc, -1, strbuf, sizeof(strbuf), NULL, NULL);
+ if (!WideCharToMultiByte(CP_UTF8, 0, buf_loc, -1, strbuf, sizeof(strbuf), NULL, NULL)) {
+ strbuf[0] = 0;
+ }
if (!result) {
BD_DEBUG(DBG_BDJ | DBG_CRIT, "can't open library '%s'\n", strbuf);
} else {
@@ -139,7 +144,7 @@ static void *_load_jvm_win32(const char **p_java_home)
static inline char *_utf8_to_cp(const char *utf8)
{
int wlen = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
- if (wlen == 0) {
+ if (wlen <= 0) {
return NULL;
}
@@ -147,17 +152,22 @@ static inline char *_utf8_to_cp(const char *utf8)
if (!wide) {
return NULL;
}
- MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wide, wlen);
+ if (!MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wide, wlen)) {
+ X_FREE(wide);
+ return NULL;
+ }
size_t len = WideCharToMultiByte(CP_ACP, 0, wide, -1, NULL, 0, NULL, NULL);
- if (len == 0) {
+ if (len <= 0) {
X_FREE(wide);
return NULL;
}
char *out = (char *)malloc(len);
if (out != NULL) {
- WideCharToMultiByte(CP_ACP, 0, wide, -1, out, len, NULL, NULL);
+ if (!WideCharToMultiByte(CP_ACP, 0, wide, -1, out, len, NULL, NULL)) {
+ X_FREE(out);
+ }
}
X_FREE(wide);
return out;
@@ -586,8 +596,12 @@ static int _create_jvm(void *jvm_lib, const char *java_home, const char *jar_fil
int ii;
for (ii = 0; ii < n; ii++) {
char *tmp = _utf8_to_cp(option[ii].optionString);
- X_FREE(option[ii].optionString);
- option[ii].optionString = tmp;
+ if (tmp) {
+ X_FREE(option[ii].optionString);
+ option[ii].optionString = tmp;
+ } else {
+ BD_DEBUG(DBG_BDJ | DBG_CRIT, "Failed to convert %s\n", option[ii].optionString);
+ }
}
#endif
More information about the libbluray-devel
mailing list