diff options
author | Marc Hoersken <info@marc-hoersken.de> | 2012-10-06 15:47:14 +0200 |
---|---|---|
committer | Marc Hoersken <info@marc-hoersken.de> | 2012-10-06 15:47:14 +0200 |
commit | a5b6f91e8d631c5750b1b883dd812576fd930c3c (patch) | |
tree | 171a014a32f80cc987233c269d4d57246b478c69 | |
parent | fbf3560886f4cd172cd9f21c4f93b0446650d4b5 (diff) |
curl_schannel.c: Fixed caching more data than required
Do not fill the decrypted data buffer with more data unless
required in order to return the requested amount of data.
-rw-r--r-- | lib/curl_schannel.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/lib/curl_schannel.c b/lib/curl_schannel.c index f57dc1f4d..75fa071ce 100644 --- a/lib/curl_schannel.c +++ b/lib/curl_schannel.c @@ -863,7 +863,8 @@ schannel_recv(struct connectdata *conn, int sockindex, connssl->encdata_offset, connssl->encdata_length); /* check if we still have some data in our buffers */ - while(connssl->encdata_offset > 0 && sspi_status == SEC_E_OK) { + while(connssl->encdata_offset > 0 && sspi_status == SEC_E_OK && + connssl->decdata_offset < len) { /* prepare data buffer for DecryptMessage call */ InitSecBuffer(&inbuf[0], SECBUFFER_DATA, connssl->encdata_buffer, curlx_uztoul(connssl->encdata_offset)); @@ -970,6 +971,9 @@ schannel_recv(struct connectdata *conn, int sockindex, } } + infof(data, "schannel: decrypted data buffer: offset %zu length %zu\n", + connssl->decdata_offset, connssl->decdata_length); + /* copy requested decrypted data to supplied buffer */ size = len < connssl->decdata_offset ? len : connssl->decdata_offset; if(size > 0) { @@ -980,6 +984,10 @@ schannel_recv(struct connectdata *conn, int sockindex, memmove(connssl->decdata_buffer, connssl->decdata_buffer + size, connssl->decdata_offset - size); connssl->decdata_offset -= size; + + infof(data, "schannel: decrypted data returned %zd\n", size); + infof(data, "schannel: decrypted data buffer: offset %zu length %zu\n", + connssl->decdata_offset, connssl->decdata_length); } /* check if the server closed the connection */ |