=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/ssh/clientloop.c,v retrieving revision 1.230 retrieving revision 1.231 diff -u -r1.230 -r1.231 --- src/usr.bin/ssh/clientloop.c 2011/01/16 11:50:05 1.230 +++ src/usr.bin/ssh/clientloop.c 2011/01/16 12:05:59 1.231 @@ -1,4 +1,4 @@ -/* $OpenBSD: clientloop.c,v 1.230 2011/01/16 11:50:05 djm Exp $ */ +/* $OpenBSD: clientloop.c,v 1.231 2011/01/16 12:05:59 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -1578,25 +1578,23 @@ } /* Output any buffered data for stdout. */ - while (buffer_len(&stdout_buffer) > 0) { + if (buffer_len(&stdout_buffer) > 0) { len = atomicio(vwrite, fileno(stdout), buffer_ptr(&stdout_buffer), buffer_len(&stdout_buffer)); - if (len != buffer_len(&stdout_buffer)) { + if (len < 0 || (u_int)len != buffer_len(&stdout_buffer)) error("Write failed flushing stdout buffer."); - break; - } - buffer_consume(&stdout_buffer, len); + else + buffer_consume(&stdout_buffer, len); } /* Output any buffered data for stderr. */ - while (buffer_len(&stderr_buffer) > 0) { + if (buffer_len(&stderr_buffer) > 0) { len = atomicio(vwrite, fileno(stderr), buffer_ptr(&stderr_buffer), buffer_len(&stderr_buffer)); - if (len != buffer_len(&stderr_buffer)) { + if (len < 0 || (u_int)len != buffer_len(&stderr_buffer)) error("Write failed flushing stderr buffer."); - break; - } - buffer_consume(&stderr_buffer, len); + else + buffer_consume(&stderr_buffer, len); } /* Clear and free any buffers. */