From 7ab4e7adb9143f3a3eef708693a526c93b2c97ee Mon Sep 17 00:00:00 2001 From: Jay Satiro Date: Sun, 10 Dec 2017 02:48:41 -0500 Subject: [PATCH] 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 --- lib/vtls/openssl.c | 4 ++++ 1 file changed, 4 insertions(+) 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; }