summaryrefslogtreecommitdiff
path: root/git/util.py
diff options
context:
space:
mode:
authorSebastian Thiel <byronimo@gmail.com>2016-05-25 09:42:52 +0200
committerSebastian Thiel <byronimo@gmail.com>2016-05-25 09:57:54 +0200
commit6ef273914de9b8a50dd0dd5308e66de85eb7d44a (patch)
tree6945642d016535a537263b8222af0e36c1a7d9f7 /git/util.py
parentb6a6a109885856aeff374c058db0f92c95606a0b (diff)
downloadgitpython-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.py14
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),