aboutsummaryrefslogtreecommitdiff
path: root/gdb/source-cache.h
diff options
context:
space:
mode:
authorTom Tromey <tromey@adacore.com>2019-03-08 13:59:27 -0700
committerTom Tromey <tromey@adacore.com>2019-03-14 05:47:11 -0600
commit3b336828de914a39741339b5341b88aa003d7225 (patch)
tree78239e64e7f5b42b525f31c45c9deeed2a64489a /gdb/source-cache.h
parentd085f98901ccd6c9764b93d3983f3c7797addc4f (diff)
downloadbinutils-3b336828de914a39741339b5341b88aa003d7225.zip
binutils-3b336828de914a39741339b5341b88aa003d7225.tar.gz
binutils-3b336828de914a39741339b5341b88aa003d7225.tar.bz2
Avoid a crash in source_cache::extract_lines
If the first requested line is larger than the number of lines in the source buffer, source_cache::extract_lines could crash, because it would try to pass string::npos" to string::substr. This patch avoids the crash by checking for this case. This version of the patch changes get_source_lines to return std::string. gdb/ChangeLog 2019-03-14 Tom Tromey <tromey@adacore.com> * source-cache.h (class source_cache) <get_source_lines>: Return std::string. * source-cache.c (source_cache::extract_lines): Handle case where first_pos==npos. Return std::string. (source_cache::get_source_lines): Update.
Diffstat (limited to 'gdb/source-cache.h')
-rw-r--r--gdb/source-cache.h7
1 files changed, 4 insertions, 3 deletions
diff --git a/gdb/source-cache.h b/gdb/source-cache.h
index dd23266..e2e25a1 100644
--- a/gdb/source-cache.h
+++ b/gdb/source-cache.h
@@ -65,9 +65,10 @@ private:
int last_line, std::string *lines_out);
/* A helper function for get_plain_source_lines that extracts the
desired source lines from TEXT, putting them into LINES_OUT. The
- arguments and return value are as for get_source_lines. */
- bool extract_lines (const struct source_text &text, int first_line,
- int last_line, std::string *lines_out);
+ arguments are as for get_source_lines. The return value is the
+ desired lines. */
+ std::string extract_lines (const struct source_text &text, int first_line,
+ int last_line);
/* The contents of the cache. */
std::vector<source_text> m_source_map;