[openssl-commits] [openssl] master update

Matt Caswell matt at openssl.org
Thu Aug 25 10:59:04 UTC 2016


The branch master has been updated
       via  fb5d9f1db5552facbc5269bc2856b58f5e4e2d13 (commit)
      from  647ac8d3d7143e3721d55e1f57730b6f26e72fc9 (commit)


- Log -----------------------------------------------------------------
commit fb5d9f1db5552facbc5269bc2856b58f5e4e2d13
Author: Andy Polyakov <appro at openssl.org>
Date:   Thu Aug 25 08:06:26 2016 +0200

    Windows: UTF-8 opt-in for command-line arguments and console input.
    
    User can make Windows openssl.exe to treat command-line arguments
    and console input as UTF-8 By setting OPENSSL_WIN32_UTF8 environment
    variable (to any value). This is likely to be required for data
    interchangeability with other OSes and PKCS#12 containers generated
    with Windows CryptoAPI.
    
    Reviewed-by: Richard Levitte <levitte at openssl.org>

-----------------------------------------------------------------------

Summary of changes:
 apps/win32_init.c             |  3 +++
 crypto/ui/ui_openssl.c        | 32 +++++++++++++++++---------------
 test/recipes/80-test_pkcs12.t |  1 +
 3 files changed, 21 insertions(+), 15 deletions(-)

diff --git a/apps/win32_init.c b/apps/win32_init.c
index 259e3f3..ebe92bc 100644
--- a/apps/win32_init.c
+++ b/apps/win32_init.c
@@ -145,6 +145,9 @@ void win32_utf8argv(int *argc, char **argv[])
     int wlen, ulen, valid = 1;
     char *arg;
 
+    if (GetEnvironmentVariableW(L"OPENSSL_WIN32_UTF8", NULL, 0) == 0)
+        return;
+
     newargc = 0;
     newargv = NULL;
     if (!validate_argv(newargc))
diff --git a/crypto/ui/ui_openssl.c b/crypto/ui/ui_openssl.c
index 98fb0e1..befe973 100644
--- a/crypto/ui/ui_openssl.c
+++ b/crypto/ui/ui_openssl.c
@@ -305,23 +305,26 @@ static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl)
     if (is_a_tty) {
         DWORD numread;
 #  if defined(CP_UTF8)
-        WCHAR wresult[BUFSIZ];
+        if (GetEnvironmentVariableW(L"OPENSSL_WIN32_UTF8", NULL, 0) != 0) {
+            WCHAR wresult[BUFSIZ];
 
-        if (ReadConsoleW(GetStdHandle(STD_INPUT_HANDLE),
+            if (ReadConsoleW(GetStdHandle(STD_INPUT_HANDLE),
                          wresult, maxsize, &numread, NULL)) {
-            if (numread >= 2 &&
-                wresult[numread-2] == L'\r' && wresult[numread-1] == L'\n') {
-                wresult[numread-2] = L'\n';
-                numread--;
+                if (numread >= 2 &&
+                    wresult[numread-2] == L'\r' &&
+                    wresult[numread-1] == L'\n') {
+                    wresult[numread-2] = L'\n';
+                    numread--;
+                }
+                wresult[numread] = '\0';
+                if (WideCharToMultiByte(CP_UTF8, 0, wresult, -1,
+                                        result, sizeof(result), NULL, 0) > 0)
+                    p = result;
+
+                OPENSSL_cleanse(wresult, sizeof(wresult));
             }
-            wresult[numread] = '\0';
-            if (WideCharToMultiByte(CP_UTF8, 0, wresult, -1,
-                                    result, sizeof(result), NULL, 0) > 0)
-                p = result;
-
-            OPENSSL_cleanse(wresult, sizeof(wresult));
-        }
-#  else
+        } else
+#  endif
         if (ReadConsoleA(GetStdHandle(STD_INPUT_HANDLE),
                          result, maxsize, &numread, NULL)) {
             if (numread >= 2 &&
@@ -332,7 +335,6 @@ static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl)
             result[numread] = '\0';
             p = result;
         }
-#  endif
     } else
 # elif defined(OPENSSL_SYS_MSDOS)
     if (!echo) {
diff --git a/test/recipes/80-test_pkcs12.t b/test/recipes/80-test_pkcs12.t
index 95d1e69..be9a72c 100644
--- a/test/recipes/80-test_pkcs12.t
+++ b/test/recipes/80-test_pkcs12.t
@@ -53,6 +53,7 @@ if (eval { require Win32::API; 1; }) {
         }
     }
 }
+$ENV{OPENSSL_WIN32_UTF8}=1;
 
 plan tests => 1;
 


More information about the openssl-commits mailing list