mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-09 02:36:01 +02:00
Patch for Devin Steffler.
Fixed 100248 [DOM AST] NPE in AbstractGNUSourceCodeParser.calculateEndOffset(..)
This commit is contained in:
parent
3ec82a67ca
commit
66495196b7
2 changed files with 23 additions and 6 deletions
|
@ -1047,8 +1047,11 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
|
||||||
break;
|
break;
|
||||||
case IToken.tDOT:
|
case IToken.tDOT:
|
||||||
// member access
|
// member access
|
||||||
consume(IToken.tDOT);
|
IToken dot = consume(IToken.tDOT);
|
||||||
IASTName name = createName(identifier());
|
IASTName name = createName(identifier());
|
||||||
|
if (name == null)
|
||||||
|
throwBacktrack(((ASTNode) firstExpression).getOffset(),
|
||||||
|
((ASTNode) firstExpression).getLength() + dot.getLength());
|
||||||
IASTFieldReference result = createFieldReference();
|
IASTFieldReference result = createFieldReference();
|
||||||
((ASTNode) result).setOffsetAndLength(
|
((ASTNode) result).setOffsetAndLength(
|
||||||
((ASTNode) firstExpression).getOffset(),
|
((ASTNode) firstExpression).getOffset(),
|
||||||
|
@ -1066,8 +1069,11 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
|
||||||
break;
|
break;
|
||||||
case IToken.tARROW:
|
case IToken.tARROW:
|
||||||
// member access
|
// member access
|
||||||
consume(IToken.tARROW);
|
IToken arrow = consume(IToken.tARROW);
|
||||||
name = createName(identifier());
|
name = createName(identifier());
|
||||||
|
if (name == null)
|
||||||
|
throwBacktrack(((ASTNode) firstExpression).getOffset(),
|
||||||
|
((ASTNode) firstExpression).getLength() + arrow.getLength());
|
||||||
result = createFieldReference();
|
result = createFieldReference();
|
||||||
((ASTNode) result).setOffsetAndLength(
|
((ASTNode) result).setOffsetAndLength(
|
||||||
((ASTNode) firstExpression).getOffset(),
|
((ASTNode) firstExpression).getOffset(),
|
||||||
|
|
|
@ -960,9 +960,12 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
|
||||||
forNewExpression);
|
forNewExpression);
|
||||||
} catch (BacktrackException bt) {
|
} catch (BacktrackException bt) {
|
||||||
backup(mark);
|
backup(mark);
|
||||||
throwBacktrack(startingOffset, figureEndOffset(declSpecifier,
|
if (declarator != null || declSpecifier != null)
|
||||||
|
throwBacktrack(startingOffset, figureEndOffset(declSpecifier,
|
||||||
declarator)
|
declarator)
|
||||||
- startingOffset);
|
- startingOffset);
|
||||||
|
else
|
||||||
|
throwBacktrack(startingOffset, bt.getLength());
|
||||||
}
|
}
|
||||||
if (declarator != null) {
|
if (declarator != null) {
|
||||||
if (declarator.getName().toCharArray().length > 0) {
|
if (declarator.getName().toCharArray().length > 0) {
|
||||||
|
@ -1585,13 +1588,17 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
|
||||||
break;
|
break;
|
||||||
case IToken.tDOT:
|
case IToken.tDOT:
|
||||||
// member access
|
// member access
|
||||||
consume(IToken.tDOT);
|
IToken dot = consume(IToken.tDOT);
|
||||||
if (LT(1) == IToken.t_template) {
|
if (LT(1) == IToken.t_template) {
|
||||||
consume(IToken.t_template);
|
consume(IToken.t_template);
|
||||||
isTemplate = true;
|
isTemplate = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
IASTName name = idExpression();
|
IASTName name = idExpression();
|
||||||
|
|
||||||
|
if (name == null)
|
||||||
|
throwBacktrack(((ASTNode) firstExpression).getOffset(),
|
||||||
|
((ASTNode) firstExpression).getLength() + dot.getLength());
|
||||||
|
|
||||||
ICPPASTFieldReference fieldReference = createFieldReference();
|
ICPPASTFieldReference fieldReference = createFieldReference();
|
||||||
((ASTNode) fieldReference).setOffsetAndLength(
|
((ASTNode) fieldReference).setOffsetAndLength(
|
||||||
|
@ -1612,7 +1619,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
|
||||||
break;
|
break;
|
||||||
case IToken.tARROW:
|
case IToken.tARROW:
|
||||||
// member access
|
// member access
|
||||||
consume(IToken.tARROW);
|
IToken arrow = consume(IToken.tARROW);
|
||||||
|
|
||||||
if (LT(1) == IToken.t_template) {
|
if (LT(1) == IToken.t_template) {
|
||||||
consume(IToken.t_template);
|
consume(IToken.t_template);
|
||||||
|
@ -1620,7 +1627,11 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
|
||||||
}
|
}
|
||||||
|
|
||||||
name = idExpression();
|
name = idExpression();
|
||||||
|
|
||||||
|
if (name == null)
|
||||||
|
throwBacktrack(((ASTNode) firstExpression).getOffset(),
|
||||||
|
((ASTNode) firstExpression).getLength() + arrow.getLength());
|
||||||
|
|
||||||
fieldReference = createFieldReference();
|
fieldReference = createFieldReference();
|
||||||
((ASTNode) fieldReference).setOffsetAndLength(
|
((ASTNode) fieldReference).setOffsetAndLength(
|
||||||
((ASTNode) firstExpression).getOffset(),
|
((ASTNode) firstExpression).getOffset(),
|
||||||
|
|
Loading…
Add table
Reference in a new issue