#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-devel

Reply via email to