diff options
author | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2009-06-07 21:45:23 +0800 |
---|---|---|
committer | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2009-06-07 21:45:23 +0800 |
commit | 1b95e78d54466842ffe7be236a76c795a2e47fa7 (patch) | |
tree | 1eddf4f33870262c1eb9d7f2ee7f0a3203a4790d | |
parent | 989b11cc9a64f74cf2ae3a81a92610e680b4e591 (diff) | |
download | pttbbs-1b95e78d54466842ffe7be236a76c795a2e47fa7.tar pttbbs-1b95e78d54466842ffe7be236a76c795a2e47fa7.tar.gz pttbbs-1b95e78d54466842ffe7be236a76c795a2e47fa7.tar.bz2 pttbbs-1b95e78d54466842ffe7be236a76c795a2e47fa7.tar.lz pttbbs-1b95e78d54466842ffe7be236a76c795a2e47fa7.tar.xz pttbbs-1b95e78d54466842ffe7be236a76c795a2e47fa7.tar.zst pttbbs-1b95e78d54466842ffe7be236a76c795a2e47fa7.zip |
* fix: crashed for read_more case in tty_read.
* example: got waterball then SEGV
* reason: telnet_process should take signed size_t.
git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@4515 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r-- | common/sys/telnet.c | 2 | ||||
-rw-r--r-- | include/cmsys.h | 2 | ||||
-rw-r--r-- | mbbsd/telnet.c | 2 |
3 files changed, 3 insertions, 3 deletions
diff --git a/common/sys/telnet.c b/common/sys/telnet.c index b0c5f1d7..2f462867 100644 --- a/common/sys/telnet.c +++ b/common/sys/telnet.c @@ -79,7 +79,7 @@ void telnet_send_init_cmds(int fd) write(fd, telnet_init_cmds, sizeof(telnet_init_cmds)); } -ssize_t telnet_process(TelnetCtx *ctx, unsigned char *buf, size_t size) +ssize_t telnet_process(TelnetCtx *ctx, unsigned char *buf, ssize_t size) { /* process buffer */ if (size > 0) { diff --git a/include/cmsys.h b/include/cmsys.h index 040f1995..863aab3f 100644 --- a/include/cmsys.h +++ b/include/cmsys.h @@ -207,6 +207,6 @@ extern void telnet_ctx_init(TelnetCtx *ctx, const struct TelnetCallback *callbac extern void telnet_ctx_set_cc_arg(TelnetCtx *ctx, void *cc_arg); extern void telnet_send_init_cmds(int fd); -extern ssize_t telnet_process(TelnetCtx *ctx, unsigned char *buf, size_t size); +extern ssize_t telnet_process(TelnetCtx *ctx, unsigned char *buf, ssize_t size); #endif diff --git a/mbbsd/telnet.c b/mbbsd/telnet.c index f348f08c..d60254ac 100644 --- a/mbbsd/telnet.c +++ b/mbbsd/telnet.c @@ -55,7 +55,7 @@ tty_read(unsigned char *buf, size_t max) if(l == 0 || (l < 0 && !(errno == EINTR || errno == EAGAIN))) abort_bbs(0); - if(!raw_connection) + if(!raw_connection || l <= 0) return l; l = telnet_process(ctx, buf, l); |