]> granicus.if.org Git - curl/commitdiff
openssl: Disable file buffering for Win32 SSLKEYLOGFILE
authorJay Satiro <raysatiro@yahoo.com>
Sun, 10 Dec 2017 07:48:41 +0000 (02:48 -0500)
committerJay Satiro <raysatiro@yahoo.com>
Sun, 10 Dec 2017 07:48:41 +0000 (02:48 -0500)
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

index 4659c79970166f20266e843ae2850b14f3e216d0..6d9e81d3b7f7801ccb54b7dd723d57b53e9ca91d 100644 (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;
       }