# # # patch "monotone.py" # from [29694462bd4bcda91e4f3c3ceebefc6834521bf4] # to [bd43c3db542b333b7fc2382412333ad111bfb4ff] # # patch "revision.psp" # from [c8fd63ea4c16d9b8cd446ff765f773f20c7adf74] # to [65c3b846ff13c46662f9ed4f1aafb3017181e354] # ============================================================ --- monotone.py 29694462bd4bcda91e4f3c3ceebefc6834521bf4 +++ monotone.py bd43c3db542b333b7fc2382412333ad111bfb4ff @@ -9,12 +9,14 @@ # should really use the "automate" interface as much as possible # +id_re = re.compile(r'^[0-9a-f]+$') + dash_re = re.compile(r'^-+$') cert_value_re = re.compile(r'^(\S*) *: (.*)$') -new_manifest_re = re.compile("^new_manifest \[(\S+)\]$") -old_revision_re = re.compile("^old_revision \[(\S+)\]$") -old_manifest_re = re.compile("^old_manifest \[(\S+)\]$") +new_manifest_re = re.compile(r'^new_manifest \[(\S+)\]$') +old_revision_re = re.compile(r'^old_revision \[(\S+)\]$') +old_manifest_re = re.compile(r'^old_manifest \[(\S+)\]$') manifest_entry_re = re.compile("^(\S+) *(.*)$") @@ -91,3 +93,6 @@ else: return result['fromchild'] +def is_valid_id(s): + return len(s) == 40 and id_re.match(s) != None + ============================================================ --- revision.psp c8fd63ea4c16d9b8cd446ff765f773f20c7adf74 +++ revision.psp 65c3b846ff13c46662f9ed4f1aafb3017181e354 @@ -22,6 +22,8 @@ if not form.has_key('id'): raise Exception("No revision ID specified.") id = form['id'] +if not monotone.is_valid_id(id): + raise Exception("Specified revision ID is not valid.") mt = Monotone(config.monotone, config.dbfile)