safety check to ensure we dont send out beyond the users buffer
authorTim Hudson <tjh@cryptsoft.com>
Sat, 26 Apr 2014 15:55:47 +0000 (01:55 +1000)
committerMatt Caswell <matt@openssl.org>
Sun, 11 May 2014 10:32:17 +0000 (11:32 +0100)
ssl/s3_pkt.c

index 8290f87290fe3b38c53b9943d169b0bc2272b768..0d3f47780a116a95528b7614b044e809b5e5b22e 100644 (file)
@@ -777,6 +777,21 @@ int ssl3_write_bytes(SSL *s, int type, const void *buf_, int len)
                return tot;
                }
 
+       /* ensure that if we end up with a smaller value of data to write 
+        * out than the the original len from a write which didn't complete 
+        * for non-blocking I/O and also somehow ended up avoiding 
+        * the check for this in ssl3_write_pending/SSL_R_BAD_WRITE_RETRY as
+        * it must never be possible to end up with (len-tot) as a large
+        * number that will then promptly send beyond the end of the users
+        * buffer ... so we trap and report the error in a way the user
+        * will notice
+        */
+       if ( len < tot)
+               {
+               SSLerr(SSL_F_SSL3_WRITE_BYTES,SSL_R_BAD_LENGTH);
+               return(-1);
+               }
+
        n=(len-tot);
        for (;;)
                {