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
This commit is contained in:
Jay Satiro 2017-12-10 02:48:41 -05:00
parent b1b94305d8
commit 7ab4e7adb9
1 changed files with 4 additions and 0 deletions

View File

@ -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;
}