filter-repo: fix detection of binary blobs for --replace-text

Detection if blob is binary for the purpose of --replace-text always
fails and text replacement is applied to all blobs. This has changed
going to python3. With python2 the same code would still be wrong but
would manifest differently.

In the construct 'for x in b"..."' the x is
 - of type <int> in python3
 - of type <str> in python2
thus in python3 condition 'x == b"\0"' can not be true for any x due to
type difference.

Further, the search was supposed to look for NUL byte and not 0
character, thus change to b"\0" instead of b"0".

Signed-off-by: rndbit <rndbit@filter.bitman.net>
pull/280/head
rndbit 3 years ago
parent d8e858aeca
commit 9cfe2b4090

@ -3261,8 +3261,10 @@ class RepoFilter(object):
if blob.original_id in self._args.strip_blobs_with_ids:
blob.skip()
if self._args.replace_text and \
not any(x == b"0" for x in blob.data[0:8192]):
if ( self._args.replace_text
# not (if blob contains zero byte in the first 8Kb, that is, if blob is binary data)
and not b"\0" in blob.data[0:8192]
):
for literal, replacement in self._args.replace_text['literals']:
blob.data = blob.data.replace(literal, replacement)
for regex, replacement in self._args.replace_text['regexes']:

Loading…
Cancel
Save