From: Jay Satiro Date: Sun, 10 Dec 2017 07:48:41 +0000 (-0500) Subject: openssl: Disable file buffering for Win32 SSLKEYLOGFILE X-Git-Tag: curl-7_58_0~81 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7ab4e7adb9143f3a3eef708693a526c93b2c97ee;p=curl 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 --- 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; }