< prev index next >

src/java.base/share/native/libzip/zip_util.c

Print this page

        

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 1995, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
  * published by the Free Software Foundation.  Oracle designates this

@@ -99,11 +99,11 @@
  */
 static ZFILE
 ZFILE_Open(const char *fname, int flags) {
 #ifdef WIN32
     WCHAR *wfname, *wprefixed_fname;
-    size_t converted_chars, fname_length;
+    size_t fname_length;
     jlong fhandle;
     const DWORD access =
         (flags & O_RDWR)   ? (GENERIC_WRITE | GENERIC_READ) :
         (flags & O_WRONLY) ?  GENERIC_WRITE :
         GENERIC_READ;

@@ -133,17 +133,21 @@
             NULL,               /* Security attributes */
             disposition,        /* creation disposition */
             flagsAndAttributes, /* flags and attributes */
             NULL);
     } else {
-        if ((wfname = (WCHAR*)malloc((fname_length + 1) * sizeof(WCHAR))) == NULL)
+        /* Get required buffer size to convert to Unicode */
+        int wfname_len = MultiByteToWideChar(CP_THREAD_ACP, MB_ERR_INVALID_CHARS,
+                                             fname, -1, NULL, 0);
+        if (wfname_len == 0) {
             return (jlong)INVALID_HANDLE_VALUE;
-
-        if (mbstowcs_s(&converted_chars, wfname, fname_length + 1, fname, fname_length) != 0) {
-            free(wfname);
+        }
+        if ((wfname = (WCHAR*)malloc(wfname_len * sizeof(WCHAR))) == NULL) {
             return (jlong)INVALID_HANDLE_VALUE;
         }
+        MultiByteToWideChar(CP_THREAD_ACP, MB_ERR_INVALID_CHARS,
+                            fname, -1, wfname, wfname_len);
         wprefixed_fname = getPrefixed(wfname, (int)fname_length);
         fhandle = (jlong)CreateFileW(
             wprefixed_fname,    /* Wide char path name */
             access,             /* Read and/or write permission */
             sharing,            /* File sharing flags */
< prev index next >