Skip to content

Commit

Permalink
filter-repo: fix detection of binary blobs for --replace-text
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
rndbit committed Sep 2, 2021
1 parent d8e858a commit 9cfe2b4
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions git-filter-repo
Original file line number Diff line number Diff line change
Expand Up @@ -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']:
Expand Down

0 comments on commit 9cfe2b4

Please sign in to comment.