From 6b0a8fbc9614433e7db4e6f994fd62886da8b8eb Mon Sep 17 00:00:00 2001 From: Richard Heck Date: Thu, 8 May 2014 18:19:55 -0400 Subject: [PATCH] Fix bug #9112: There is a test here that seems intended to catch the case where there are unbalanced braces, but it comes too late. In that case, we try to check cmd[docstring::npos] and crash. --- src/Encoding.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Encoding.cpp b/src/Encoding.cpp index a231106d24..bc27675f13 100644 --- a/src/Encoding.cpp +++ b/src/Encoding.cpp @@ -537,8 +537,11 @@ docstring Encodings::fromLaTeXCommand(docstring const & cmd, int cmdtype, if (j + 1 < cmdend && cmd[j + 1] == '{') { size_t k = j + 1; int count = 1; - while (k < cmdend && count && k != docstring::npos) { + while (k < cmdend && count) { k = cmd.find_first_of(from_ascii("{}"), k + 1); + // braces may not be balanced + if (k == docstring::npos) + break; if (cmd[k] == '{') ++count; else @@ -603,8 +606,11 @@ docstring Encodings::fromLaTeXCommand(docstring const & cmd, int cmdtype, k < cmdend && cmd[k] == '{') { size_t l = k; int count = 1; - while (l < cmdend && count && l != docstring::npos) { + while (l < cmdend && count) { l = cmd.find_first_of(from_ascii("{}"), l + 1); + // braces may not be balanced + if (l == docstring::npos) + break; if (cmd[l] == '{') ++count; else