From 887bd502d2f2052816adbb21be254b254ad8d9a0 Mon Sep 17 00:00:00 2001
From: Paul Bakker
Date: Wed, 8 Jun 2011 13:10:54 +0000
Subject: [PATCH] - Undid fix for ssl_write that introduced a true bug when
buffers are running full.
---
ChangeLog | 5 +++++
library/ssl_tls.c | 24 +++++++++++++-----------
2 files changed, 18 insertions(+), 11 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index cd054c197..0ba460528 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
PolarSSL ChangeLog
+= Version trunk
+Bugfix
+ * Undid faulty bug fix in ssl_write() when flushing old data (Ticket
+ #18)
+
= Version 0.99-pre5 released on 2011-05-26
Features
* Added additional Cipher Block Modes to symmetric ciphers
diff --git a/library/ssl_tls.c b/library/ssl_tls.c
index 47723cce8..7f82fa0a1 100644
--- a/library/ssl_tls.c
+++ b/library/ssl_tls.c
@@ -2164,6 +2164,9 @@ int ssl_write( ssl_context *ssl, const unsigned char *buf, size_t len )
}
}
+ n = ( len < SSL_MAX_CONTENT_LEN )
+ ? len : SSL_MAX_CONTENT_LEN;
+
if( ssl->out_left != 0 )
{
if( ( ret = ssl_flush_output( ssl ) ) != 0 )
@@ -2172,18 +2175,17 @@ int ssl_write( ssl_context *ssl, const unsigned char *buf, size_t len )
return( ret );
}
}
-
- n = ( len < SSL_MAX_CONTENT_LEN )
- ? len : SSL_MAX_CONTENT_LEN;
-
- ssl->out_msglen = n;
- ssl->out_msgtype = SSL_MSG_APPLICATION_DATA;
- memcpy( ssl->out_msg, buf, n );
-
- if( ( ret = ssl_write_record( ssl ) ) != 0 )
+ else
{
- SSL_DEBUG_RET( 1, "ssl_write_record", ret );
- return( ret );
+ ssl->out_msglen = n;
+ ssl->out_msgtype = SSL_MSG_APPLICATION_DATA;
+ memcpy( ssl->out_msg, buf, n );
+
+ if( ( ret = ssl_write_record( ssl ) ) != 0 )
+ {
+ SSL_DEBUG_RET( 1, "ssl_write_record", ret );
+ return( ret );
+ }
}
SSL_DEBUG_MSG( 2, ( "<= write" ) );