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@openssl.org>
int wlen, ulen, valid = 1;
char *arg;
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))
newargc = 0;
newargv = NULL;
if (!validate_argv(newargc))
if (is_a_tty) {
DWORD numread;
# if defined(CP_UTF8)
if (is_a_tty) {
DWORD numread;
# if defined(CP_UTF8)
+ 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)) {
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
if (ReadConsoleA(GetStdHandle(STD_INPUT_HANDLE),
result, maxsize, &numread, NULL)) {
if (numread >= 2 &&
if (ReadConsoleA(GetStdHandle(STD_INPUT_HANDLE),
result, maxsize, &numread, NULL)) {
if (numread >= 2 &&
result[numread] = '\0';
p = result;
}
result[numread] = '\0';
p = result;
}
} else
# elif defined(OPENSSL_SYS_MSDOS)
if (!echo) {
} else
# elif defined(OPENSSL_SYS_MSDOS)
if (!echo) {
+$ENV{OPENSSL_WIN32_UTF8}=1;