diff options
author | Daniel Jacobowitz <drow@false.org> | 2009-11-12 21:01:00 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2009-11-12 21:01:00 +0000 |
commit | b86ab4ff1548b4524bb90e3348ae416c586e8380 (patch) | |
tree | 4814babcff48f4b552a42c8b4ee62a0ab0280590 | |
parent | a69b7d9d9622c4e238978449762097a216f55b8b (diff) | |
download | gdb-b86ab4ff1548b4524bb90e3348ae416c586e8380.zip gdb-b86ab4ff1548b4524bb90e3348ae416c586e8380.tar.gz gdb-b86ab4ff1548b4524bb90e3348ae416c586e8380.tar.bz2 |
* remote-fileio.c (remote_fileio_func_read): Limit console
reads to 16K.
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/remote-fileio.c | 15 |
2 files changed, 18 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 424383d..275955c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,4 +1,9 @@ 2009-11-12 Daniel Jacobowitz <dan@codesourcery.com> + + * remote-fileio.c (remote_fileio_func_read): Limit console + reads to 16K. + +2009-11-12 Daniel Jacobowitz <dan@codesourcery.com> Paul Brook <paul@codesourcery.com> * c-typeprint.c (c_type_print_base): Skip artificial fields. diff --git a/gdb/remote-fileio.c b/gdb/remote-fileio.c index 1683e99..31ee244 100644 --- a/gdb/remote-fileio.c +++ b/gdb/remote-fileio.c @@ -741,7 +741,7 @@ remote_fileio_func_read (char *buf) static char *remaining_buf = NULL; static int remaining_length = 0; - buffer = (gdb_byte *) xmalloc (32768); + buffer = (gdb_byte *) xmalloc (16384); if (remaining_buf) { remote_fio_no_longjmp = 1; @@ -763,7 +763,18 @@ remote_fileio_func_read (char *buf) } else { - ret = ui_file_read (gdb_stdtargin, (char *) buffer, 32767); + /* Windows (at least XP and Server 2003) has difficulty + with large reads from consoles. If a handle is + backed by a real console device, overly large reads + from the handle will fail and set errno == ENOMEM. + On a Windows Server 2003 system where I tested, + reading 26608 bytes from the console was OK, but + anything above 26609 bytes would fail. The limit has + been observed to vary on different systems. So, we + limit this read to something smaller than that - by a + safe margin, in case the limit depends on system + resources or version. */ + ret = ui_file_read (gdb_stdtargin, (char *) buffer, 16383); remote_fio_no_longjmp = 1; if (ret > 0 && (size_t)ret > length) { |