diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2017-10-07 19:43:17 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2017-10-07 19:43:17 +0900 |
| commit | 8b32b2682807cd453d0fa99d5af6c0fadf7fadba (patch) | |
| tree | 29fe89f35119a97555615f9460e190fbe29cf690 /src | |
| parent | 64fe98a1ea7f0cfe19eb30e2396f3e0cbe262927 (diff) | |
wintls: Potential fix for undecrypted read
Diffstat (limited to 'src')
| -rw-r--r-- | src/WinTLSSession.cc | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/src/WinTLSSession.cc b/src/WinTLSSession.cc index 78a919a7..eba81ce8 100644 --- a/src/WinTLSSession.cc +++ b/src/WinTLSSession.cc @@ -514,18 +514,14 @@ ssize_t WinTLSSession::readData(void* data, size_t len) return TLS_ERR_ERROR; } - // Decrypted message successfully. - bool ate = false; - for (auto& buf : bufs) { - if (buf.BufferType == SECBUFFER_DATA && buf.cbBuffer > 0) { - decBuf_.write(buf.pvBuffer, buf.cbBuffer); - } - else if (buf.BufferType == SECBUFFER_EXTRA && buf.cbBuffer > 0) { - readBuf_.eat(readBuf_.size() - buf.cbBuffer); - ate = true; - } + // Decrypted message successfully. Inspired from curl schannel.c. + if (bufs[1].BufferType == SECBUFFER_DATA && bufs[1].cbBuffer > 0) { + decBuf_.write(bufs[1].pvBuffer, bufs[1].cbBuffer); } - if (!ate) { + if (bufs[3].BufferType == SECBUFFER_EXTRA && bufs[3].cbBuffer > 0) { + readBuf_.eat(readBuf_.size() - bufs[3].cbBuffer); + } + else { readBuf_.clear(); } |
