summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-06-21 03:30:29 +0300
committerAndrei Karas <akaras@inbox.ru>2015-06-21 14:46:55 +0300
commitb2b26751445d89a4a1c26d4d77f140039deb27eb (patch)
tree0fbcf1d9c406f48d2da2bd41dc8a6e8ce66466ef
parent97f87df9fe13dcbbf89cd426c30a9aa1661f2e50 (diff)
downloadparanucker-b2b26751445d89a4a1c26d4d77f140039deb27eb.tar.gz
paranucker-b2b26751445d89a4a1c26d4d77f140039deb27eb.tar.bz2
paranucker-b2b26751445d89a4a1c26d4d77f140039deb27eb.tar.xz
paranucker-b2b26751445d89a4a1c26d4d77f140039deb27eb.zip
Add protection against infinite loop.
-rw-r--r--src/parsers/generic.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/parsers/generic.cpp b/src/parsers/generic.cpp
index b2743a4..a6308b3 100644
--- a/src/parsers/generic.cpp
+++ b/src/parsers/generic.cpp
@@ -56,6 +56,18 @@ Node *createParseNode(Node *parent,
return nullptr;
}
+ if (allocations > 1000000)
+ {
+ fatal_error(0, "Plugin error. Infinite loop detected 1");
+ return nullptr;
+ }
+
+ if (parent && parent->indent > 30000)
+ {
+ fatal_error(0, "Plugin error. Infinite loop detected 2");
+ return nullptr;
+ }
+
Node *node = nullptr;
switch (TREE_CODE(gccNode))
{