The branch, v3-4-test has been updated
       via  44576254f8c0d35327cfe8f9928f0efc987b5822 (commit)
      from  4a4047c3b08412cfdd8c03b1994a925e10fc4c4a (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-4-test


- Log -----------------------------------------------------------------
commit 44576254f8c0d35327cfe8f9928f0efc987b5822
Author: Stefan Metzmacher <me...@samba.org>
Date:   Wed Apr 8 19:08:34 2009 +0200

    socket_wrapper: fix crash bug in swrap_readv/writev
    
    metze
    (cherry picked from commit f20f5ae8e6b9ca5c90441a3083f6904168388fdf)

-----------------------------------------------------------------------

Summary of changes:
 lib/socket_wrapper/socket_wrapper.c |   14 ++++++++++----
 1 files changed, 10 insertions(+), 4 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/socket_wrapper/socket_wrapper.c 
b/lib/socket_wrapper/socket_wrapper.c
index 44082e7..193e7a1 100644
--- a/lib/socket_wrapper/socket_wrapper.c
+++ b/lib/socket_wrapper/socket_wrapper.c
@@ -2053,6 +2053,7 @@ int swrap_readv(int s, const struct iovec *vector, size_t 
count)
                uint8_t *buf;
                off_t ofs = 0;
                size_t i;
+               size_t remain = ret;
 
                /* we capture it as one single packet */
                buf = (uint8_t *)malloc(ret);
@@ -2063,10 +2064,12 @@ int swrap_readv(int s, const struct iovec *vector, 
size_t count)
                }
 
                for (i=0; i < count; i++) {
+                       size_t this_time = MIN(remain, vector[i].iov_len);
                        memcpy(buf + ofs,
                               vector[i].iov_base,
-                              vector[i].iov_len);
-                       ofs += vector[i].iov_len;
+                              this_time);
+                       ofs += this_time;
+                       remain -= this_time;
                }
 
                swrap_dump_packet(si, NULL, SWRAP_RECV, buf, ret);
@@ -2113,6 +2116,7 @@ int swrap_writev(int s, const struct iovec *vector, 
size_t count)
                uint8_t *buf;
                off_t ofs = 0;
                size_t i;
+               size_t remain = ret;
 
                /* we capture it as one single packet */
                buf = (uint8_t *)malloc(ret);
@@ -2123,10 +2127,12 @@ int swrap_writev(int s, const struct iovec *vector, 
size_t count)
                }
 
                for (i=0; i < count; i++) {
+                       size_t this_time = MIN(remain, vector[i].iov_len);
                        memcpy(buf + ofs,
                               vector[i].iov_base,
-                              vector[i].iov_len);
-                       ofs += vector[i].iov_len;
+                              this_time);
+                       ofs += this_time;
+                       remain -= this_time;
                }
 
                swrap_dump_packet(si, NULL, SWRAP_SEND, buf, ret);


-- 
Samba Shared Repository

Reply via email to