Save and restore the Windows error around TlsGetValue.
authorDavid Benjamin <davidben@google.com>
Sun, 20 May 2018 21:24:30 +0000 (17:24 -0400)
committerDavid Benjamin <davidben@google.com>
Wed, 23 May 2018 21:34:54 +0000 (17:34 -0400)
commit2de108dfa343c3e06eb98beb122cd06306bb12fd
tree3e49b8444a3c29a076eac36a126b77d7891d2f5b
parente363534cfe0ae01503dde6963e0631ec5f7fef3f
Save and restore the Windows error around TlsGetValue.

TlsGetValue clears the last error even on success, so that callers may
distinguish it successfully returning NULL or failing. This error-mangling
behavior interferes with the caller's use of GetLastError. In particular
SSL_get_error queries the error queue to determine whether the caller should
look at the OS's errors. To avoid destroying state, save and restore the
Windows error.

Fixes #6299.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6316)
crypto/threads_win.c
test/build.info
test/errtest.c [new file with mode: 0644]
test/recipes/04-test_err.t [new file with mode: 0644]