Skip to content

Commit b41ab8a

Browse files
IOBYTEdanmar
authored andcommitted
Fixed danmar#5088 (Token::Match called with varid 0. in libreoffice sd/source/ui/table/TableDesignPane.cxx)
1 parent cee40be commit b41ab8a

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

lib/tokenize.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4213,6 +4213,17 @@ Token *Tokenizer::simplifyAddBracesPair(Token *tok, bool commandWithCondition)
42134213
if (tokAfterCondition->str()=="{") {
42144214
// already surrounded by braces
42154215
tokBracesEnd=tokAfterCondition->link();
4216+
} else if (Token::Match(tokAfterCondition, "try {") &&
4217+
Token::Match(tokAfterCondition->linkAt(1), "} catch (")) {
4218+
tokAfterCondition->previous()->insertToken("{");
4219+
Token * tokOpenBrace = tokAfterCondition->previous();
4220+
Token * tokEnd = tokAfterCondition->linkAt(1)->linkAt(2)->linkAt(1);
4221+
4222+
tokEnd->insertToken("}");
4223+
Token * tokCloseBrace = tokEnd->next();
4224+
4225+
Token::createMutualLinks(tokOpenBrace, tokCloseBrace);
4226+
tokBracesEnd = tokCloseBrace;
42164227
} else {
42174228
Token * tokEnd = simplifyAddBracesToCommand(tokAfterCondition);
42184229
if (!tokEnd) // Ticket #4887

test/testtokenize.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,8 @@ class TestTokenizer : public TestFixture {
121121
TEST_CASE(whileAddBraces);
122122
TEST_CASE(doWhileAddBraces);
123123

124-
TEST_CASE(forAddBraces);
124+
TEST_CASE(forAddBraces1);
125+
TEST_CASE(forAddBraces2); // #5088
125126

126127
TEST_CASE(pointers_condition);
127128

@@ -1459,7 +1460,7 @@ class TestTokenizer : public TestFixture {
14591460
}
14601461
}
14611462

1462-
void forAddBraces() {
1463+
void forAddBraces1() {
14631464
{
14641465
const char code[] = "void f() {\n"
14651466
" for(;;)\n"
@@ -1491,6 +1492,15 @@ class TestTokenizer : public TestFixture {
14911492
}
14921493
}
14931494

1495+
void forAddBraces2() { // #5088
1496+
const char code[] = "void f() {\n"
1497+
" for(;;) try { } catch (...) { }\n"
1498+
"}";
1499+
const char expected[] = "void f ( ) {\n"
1500+
"for ( ; ; ) { try { } catch ( . . . ) { } }\n"
1501+
"}";
1502+
ASSERT_EQUALS(expected, tokenizeAndStringify(code, true));
1503+
}
14941504

14951505
std::string simplifyKnownVariables(const char code[]) {
14961506
errout.str("");

0 commit comments

Comments
 (0)