summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2019-09-19 19:49:39 +0200
committerTom de Vries <tdevries@suse.de>2019-09-19 19:49:39 +0200
commitf64e2f4045485f99b4ce6649fdab874dacccd5a6 (patch)
tree6edab5538be762703abb3066a850c109d2b970c5
parent7738ddb418335e6a9dbf00e79fb1369bd762ecd1 (diff)
downloadbinutils-gdb-f64e2f4045485f99b4ce6649fdab874dacccd5a6.tar.gz
[gdb] Catch exception when constructing the highlighter
Currently in source_cache::ensure we catch the exception that triggers when highlighter->highlight is called: ... try { std::istringstream input (contents); std::ostringstream output; highlighter->highlight (input, output, lang_name, fullname); ... and the file used earlier in the construction of the highlighter: ... highlighter = new srchilite::SourceHighlight ("esc.outlang"); ... is missing. The fact that this exception triggers when highlighter->highlight is called is an implementation artefact of libsource-highlight.so though, and this could be different for older or newer versions. Make things more robust by also catching exceptions thrown during construction of the highlighter. This makes the handling on master equivalent with what has been committed for 8.3.1. Tested on x86_64-linux. gdb/ChangeLog: 2019-09-19 Tom de Vries <tdevries@suse.de> PR gdb/25009 * source-cache.c (source_cache::ensure): Catch exception thrown during construction of the highlighter.
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/source-cache.c12
2 files changed, 12 insertions, 6 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 7057e37e8da..39f917b1867 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2019-09-19 Tom de Vries <tdevries@suse.de>
+
+ PR gdb/25009
+ * source-cache.c (source_cache::ensure): Catch exception thrown during
+ construction of the highlighter.
+
2019-09-18 Alan Modra <amodra@gmail.com>
* aarch64-linux-tdep.c, * arm-tdep.c, * auto-load.c,
diff --git a/gdb/source-cache.c b/gdb/source-cache.c
index 7a52ce9458e..1fe6da81326 100644
--- a/gdb/source-cache.c
+++ b/gdb/source-cache.c
@@ -190,14 +190,14 @@ source_cache::ensure (struct symtab *s)
conditional compilation in source-cache.h. */
static srchilite::SourceHighlight *highlighter;
- if (highlighter == nullptr)
- {
- highlighter = new srchilite::SourceHighlight ("esc.outlang");
- highlighter->setStyleFile ("esc.style");
- }
-
try
{
+ if (highlighter == nullptr)
+ {
+ highlighter = new srchilite::SourceHighlight ("esc.outlang");
+ highlighter->setStyleFile ("esc.style");
+ }
+
std::istringstream input (contents);
std::ostringstream output;
highlighter->highlight (input, output, lang_name, fullname);