#281: Possible bug in direct_tcpip.c
----------------------+--------------------
 Reporter:  jakob     |       Owner:
     Type:  defect    |      Status:  new
 Priority:  normal    |   Milestone:  1.4.3
Component:  examples  |     Version:  1.4.2
 Keywords:            |  Blocked By:
   Blocks:            |
----------------------+--------------------
 I think I found a bug in direct_tcpip.c
 This is the problematic section. It tries to send "len" bytes stored in
 "buf" on a channel.
 {{{
 235                 wr = 0;
 236                 do {
 237                     i = libssh2_channel_write(channel, buf, len);
 238                     if (i < 0) {
 239                         fprintf(stderr, "libssh2_channel_write: %d\n",
 i);
 240                         goto shutdown;
 241                     }
 242                     wr += i;
 243                 } while(i > 0 && wr < len);
 }}}
 However, when libssh2_channel_write fails to write everything at once,
 then this code will try writing the data in buf again from the beginning!
 Also, I don't know why it aborts when i=0, this would just ignore some of
 the data.
 I think this code should rather like this:
 {{{
 235                 wr = 0;
 236                 while (wr<len) {
 237                     i = libssh2_channel_write(channel, buf+wr, len);
 238                     if (i < 0) {
 239                         fprintf(stderr, "libssh2_channel_write: %d\n",
 i);
 240                         goto shutdown;
 241                     }
 242                     wr += i;
 243                 }
 }}}
 Please excuse that I include the code inline in this ticket, I am not very
 familiar with git, but I wanted to report this issue nevertheless.
-- Ticket URL: <https://trac.libssh2.org/ticket/281> libssh2 <https://trac.libssh2.org/> C library for writing portable SSH2 clients _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-develReceived on 2014-01-08