aboutsummaryrefslogtreecommitdiff
path: root/lib/vtls/openssl.c
diff options
context:
space:
mode:
authorJay Satiro <raysatiro@yahoo.com>2017-12-10 02:48:41 -0500
committerJay Satiro <raysatiro@yahoo.com>2017-12-10 02:48:41 -0500
commit7ab4e7adb9143f3a3eef708693a526c93b2c97ee (patch)
treec6f2dd623dbe23fdae68f96bf21831fa68512722 /lib/vtls/openssl.c
parentb1b94305d896e4204159871318d6d08109b44764 (diff)
openssl: Disable file buffering for Win32 SSLKEYLOGFILE
Prior to this change SSLKEYLOGFILE used line buffering on WIN32 just like it does for other platforms. However, the Windows CRT does not actually support line buffering (_IOLBF) and will use full buffering (_IOFBF) instead. We can't use full buffering because multiple processes may be writing to the file and that could lead to corruption, and since full buffering is the only buffering available this commit disables buffering for Windows SSLKEYLOGFILE entirely (_IONBF). Ref: https://github.com/curl/curl/pull/1346#issuecomment-350530901
Diffstat (limited to 'lib/vtls/openssl.c')
-rw-r--r--lib/vtls/openssl.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/lib/vtls/openssl.c b/lib/vtls/openssl.c
index 4659c7997..6d9e81d3b 100644
--- a/lib/vtls/openssl.c
+++ b/lib/vtls/openssl.c
@@ -948,7 +948,11 @@ static int Curl_ossl_init(void)
if(keylog_file_name && !keylog_file_fp) {
keylog_file_fp = fopen(keylog_file_name, FOPEN_APPENDTEXT);
if(keylog_file_fp) {
+#ifdef WIN32
+ if(setvbuf(keylog_file_fp, NULL, _IONBF, 0)) {
+#else
if(setvbuf(keylog_file_fp, NULL, _IOLBF, 4096)) {
+#endif
fclose(keylog_file_fp);
keylog_file_fp = NULL;
}