summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2017-10-07 22:27:46 +0900
committerGitHub <noreply@github.com>2017-10-07 22:27:46 +0900
commitdb639dcc9896a2f5db6c9db0973ae7df94af007d (patch)
tree29fe89f35119a97555615f9460e190fbe29cf690
parent64fe98a1ea7f0cfe19eb30e2396f3e0cbe262927 (diff)
parent8b32b2682807cd453d0fa99d5af6c0fadf7fadba (diff)
Merge pull request #1021 from aria2/fix-win-tls-read
wintls: Potential fix for undecrypted read
-rw-r--r--src/WinTLSSession.cc18
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();
}