mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 05:16:21 +00:00
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.
This commit is contained in:
parent
b242a90bd0
commit
c16ccdb5fd
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user