From: Enrico Forestieri Date: Sun, 15 Oct 2017 13:29:33 +0000 (+0200) Subject: Fix issue with regular expressions X-Git-Tag: lyx-2.4.0dev-acb2ca7b~4480 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;ds=sidebyside;h=c16ccdb5fd25a14c096ef9dfa68975c77377bf41;p=features.git Fix issue with regular expressions At least with gcc 6.4, if the first parameter passed to regex_match() is afterward changed, the second one gets corrupted. This is avoided by using a temporary string. --- diff --git a/src/BiblioInfo.cpp b/src/BiblioInfo.cpp index 87245d3824..bb7c64cda2 100644 --- a/src/BiblioInfo.cpp +++ b/src/BiblioInfo.cpp @@ -236,6 +236,8 @@ docstring constructName(docstring const & name, string const scheme) static regex const reg2("(.*)(\\{%suffix%\\[\\[)([^\\]]+)(\\]\\]\\})(.*)"); static regex const reg3("(.*)(\\{%prefix%\\[\\[)([^\\]]+)(\\]\\]\\})(.*)"); smatch sub; + // Changing the first parameter of regex_match() may corrupt the + // second one. In this case we use the temporary string tmp. if (regex_match(scheme, sub, reg1)) { res = sub.str(1); if (!prename.empty()) @@ -243,16 +245,16 @@ docstring constructName(docstring const & name, string const scheme) res += sub.str(5); } if (regex_match(res, sub, reg2)) { - res = sub.str(1); + string tmp = sub.str(1); if (!suffix.empty()) - res += sub.str(3); - res += sub.str(5); + tmp += sub.str(3); + res = tmp + sub.str(5); } if (regex_match(res, sub, reg3)) { - res = sub.str(1); + string tmp = sub.str(1); if (!prefix.empty()) - res += sub.str(3); - res += sub.str(5); + tmp += sub.str(3); + res = tmp + sub.str(5); } docstring result = from_ascii(res); result = subst(result, from_ascii("%prename%"), prename);