mirror of https://github.com/aria2/aria2
wintls: Potential fix for undecrypted read
parent
64fe98a1ea
commit
8b32b26828
|
@ -514,18 +514,14 @@ ssize_t WinTLSSession::readData(void* data, size_t len)
|
||||||
return TLS_ERR_ERROR;
|
return TLS_ERR_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Decrypted message successfully.
|
// Decrypted message successfully. Inspired from curl schannel.c.
|
||||||
bool ate = false;
|
if (bufs[1].BufferType == SECBUFFER_DATA && bufs[1].cbBuffer > 0) {
|
||||||
for (auto& buf : bufs) {
|
decBuf_.write(bufs[1].pvBuffer, bufs[1].cbBuffer);
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (!ate) {
|
if (bufs[3].BufferType == SECBUFFER_EXTRA && bufs[3].cbBuffer > 0) {
|
||||||
|
readBuf_.eat(readBuf_.size() - bufs[3].cbBuffer);
|
||||||
|
}
|
||||||
|
else {
|
||||||
readBuf_.clear();
|
readBuf_.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue