diff options
author | Sebastian Thiel <byronimo@gmail.com> | 2016-05-25 09:42:52 +0200 |
---|---|---|
committer | Sebastian Thiel <byronimo@gmail.com> | 2016-05-25 09:57:54 +0200 |
commit | 6ef273914de9b8a50dd0dd5308e66de85eb7d44a (patch) | |
tree | 6945642d016535a537263b8222af0e36c1a7d9f7 /git/util.py | |
parent | b6a6a109885856aeff374c058db0f92c95606a0b (diff) | |
download | gitpython-6ef273914de9b8a50dd0dd5308e66de85eb7d44a.tar.gz |
fix(RemoteProgress): improve message sanitization
Don't allow `, ` prefixes or suffixes in messages.
Fixes #438
Diffstat (limited to 'git/util.py')
-rw-r--r-- | git/util.py | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/git/util.py b/git/util.py index bfcb8941..a267f183 100644 --- a/git/util.py +++ b/git/util.py @@ -171,12 +171,16 @@ class RemoteProgress(object): STAGE_MASK = BEGIN | END OP_MASK = ~STAGE_MASK + DONE_TOKEN = 'done.' + TOKEN_SEPARATOR = ', ' + __slots__ = ("_cur_line", "_seen_ops") - re_op_absolute = re.compile("(remote: )?([\w\s]+):\s+()(\d+)()(.*)") - re_op_relative = re.compile("(remote: )?([\w\s]+):\s+(\d+)% \((\d+)/(\d+)\)(.*)") + re_op_absolute = re.compile(r"(remote: )?([\w\s]+):\s+()(\d+)()(.*)") + re_op_relative = re.compile(r"(remote: )?([\w\s]+):\s+(\d+)% \((\d+)/(\d+)\)(.*)") def __init__(self): self._seen_ops = list() + self._cur_line = None def _parse_progress_line(self, line): """Parse progress information from the given line as retrieved by git-push @@ -257,11 +261,11 @@ class RemoteProgress(object): # END message handling message = message.strip() - done_token = ', done.' - if message.endswith(done_token): + if message.endswith(self.DONE_TOKEN): op_code |= self.END - message = message[:-len(done_token)] + message = message[:-len(self.DONE_TOKEN)] # END end message handling + message = message.strip(self.TOKEN_SEPARATOR) self.update(op_code, cur_count and float(cur_count), |