< prev index next >

src/java.base/windows/native/libjava/canonicalize_md.c

Print this page

        

@@ -328,31 +328,37 @@
    Converts to wchar and delegates to wcanonicalize. */
 JNIEXPORT int
 JDK_Canonicalize(const char *orig, char *out, int len) {
     wchar_t* wpath = NULL;
     wchar_t* wresult = NULL;
-    size_t conv;
-    size_t path_len = strlen(orig);
+    int wpath_len;
     int ret = -1;
 
-    if ((wpath = (wchar_t*) malloc(sizeof(wchar_t) * (path_len + 1))) == NULL) {
+    /* Get required buffer size to convert to Unicode */
+    wpath_len = MultiByteToWideChar(CP_THREAD_ACP, MB_ERR_INVALID_CHARS,
+                                    orig, -1, NULL, 0);
+    if (wpath_len == 0) {
         goto finish;
     }
 
-    if (mbstowcs_s(&conv, wpath, path_len + 1, orig, path_len) != 0) {
+    if ((wpath = (wchar_t*) malloc(sizeof(wchar_t) * wpath_len)) == NULL) {
         goto finish;
     }
 
+    MultiByteToWideChar(CP_THREAD_ACP, MB_ERR_INVALID_CHARS,
+                        orig, -1, wpath, wpath_len);
+
     if ((wresult = (wchar_t*) malloc(sizeof(wchar_t) * len)) == NULL) {
         goto finish;
     }
 
     if (wcanonicalize(wpath, wresult, len) != 0) {
         goto finish;
     }
 
-    if (wcstombs_s(&conv, out, (size_t) len, wresult, (size_t) (len - 1)) != 0) {
+    if (WideCharToMultiByte(CP_THREAD_ACP, 0,
+                            wresult, -1, out, len, NULL, NULL) == 0) {
         goto finish;
     }
 
     // Change return value to success.
     ret = 0;
< prev index next >