Notice to GitKraken users: A vulnerability has been found in the SSH key generation of GitKraken versions 7.6.0 to 8.0.0 (https://www.gitkraken.com/blog/weak-ssh-key-fix). If you use GitKraken and have generated a SSH key using one of these versions, please remove it both from your local workstation and from your LRZ GitLab profile.

21.10.2021, 9:00 - 11:00: Due to updates GitLab may be unavailable for some minutes between 09:00 and 11:00.

Commit 6d96b270 authored by di68kap's avatar di68kap
Browse files

- parser.py: full memoization with assertions

parent ccf7d3fe
......@@ -241,6 +241,7 @@ def add_parser_guard(parser_func):
# return saved result
if location in parser.visited:
node, rlen = parser.visited[location]
assert rlen == location - (0 if node is None else node.len)
rest = grammar.document__[-rlen:] if rlen else ''
return node, rest
......@@ -261,6 +262,7 @@ def add_parser_guard(parser_func):
if node is None:
# retrieve an earlier match result (from left recursion) if it exists
node, rlen = parser.visited.get(location, (None, len(rest)))
assert rlen == location - (0 if node is None else node.len)
rest = grammar.document__[-rlen:] if rlen else ''
# don't overwrite any positive match (i.e. node not None) in the cache
# and don't add empty entries for parsers returning from left recursive calls!
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment