From 76b83c514f6b202659c8b600b20fe0e107f83f6f Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Fri, 6 Jul 2012 15:51:40 +0000 Subject: [PATCH] gdb/ PR 14321 * findcmd.c (parse_find_args): New variable pattern_buf_size_need. Increase buffer sizes to 2x we need, not just 2x of the previous size. gdb/testsuite/ PR 14321 * gdb.base/find.exp (find int64_search_buf, +64/8*100, int64_search_buf): New test. --- gdb/ChangeLog | 6 ++++++ gdb/findcmd.c | 8 +++++--- gdb/testsuite/ChangeLog | 6 ++++++ gdb/testsuite/gdb.base/find.exp | 3 +++ 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 16e795c888..5c434a0632 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2012-07-06 Jan Kratochvil + + PR 14321 + * findcmd.c (parse_find_args): New variable pattern_buf_size_need. + Increase buffer sizes to 2x we need, not just 2x of the previous size. + 2012-07-06 Tom Tromey * c-exp.y (DOTDOTDOT): New token. diff --git a/gdb/findcmd.c b/gdb/findcmd.c index 3fce269591..68184aa27e 100644 --- a/gdb/findcmd.c +++ b/gdb/findcmd.c @@ -170,6 +170,7 @@ parse_find_args (char *args, ULONGEST *max_countp, { LONGEST x; int val_bytes; + ULONGEST pattern_buf_size_need; while (isspace (*s)) ++s; @@ -179,12 +180,13 @@ parse_find_args (char *args, ULONGEST *max_countp, /* Keep it simple and assume size == 'g' when watching for when we need to grow the pattern buf. */ - if ((pattern_buf_end - pattern_buf + max (val_bytes, sizeof (int64_t))) - > pattern_buf_size) + pattern_buf_size_need = (pattern_buf_end - pattern_buf + + max (val_bytes, sizeof (int64_t))); + if (pattern_buf_size_need > pattern_buf_size) { size_t current_offset = pattern_buf_end - pattern_buf; - pattern_buf_size *= 2; + pattern_buf_size = pattern_buf_size_need * 2; pattern_buf = xrealloc (pattern_buf, pattern_buf_size); pattern_buf_end = pattern_buf + current_offset; } diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index fdc921d709..4301b03286 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2012-07-06 Jan Kratochvil + + PR 14321 + * gdb.base/find.exp + (find int64_search_buf, +64/8*100, int64_search_buf): New test. + 2012-07-06 Tom Tromey * gdb.base/whatis.exp: Add test. diff --git a/gdb/testsuite/gdb.base/find.exp b/gdb/testsuite/gdb.base/find.exp index ad54d65b88..5e41d9786d 100644 --- a/gdb/testsuite/gdb.base/find.exp +++ b/gdb/testsuite/gdb.base/find.exp @@ -182,3 +182,6 @@ if [isnative] { "${hex_number}${one_pattern_found}" \ "find pattern straddling chunk boundary" } + +# Check GDB buffer overflow. +gdb_test "find int64_search_buf, +64/8*100, int64_search_buf" " \r\n1 pattern found\\." -- 2.34.1