From 3b336828de914a39741339b5341b88aa003d7225 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Fri, 8 Mar 2019 13:59:27 -0700 Subject: 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 * source-cache.h (class source_cache) : 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. --- gdb/source-cache.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'gdb/source-cache.h') 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 m_source_map; -- cgit v1.1