Skip to content

Commit

Permalink
Fixes Tribler#7966
Browse files Browse the repository at this point in the history
  • Loading branch information
kozlovsky committed Apr 12, 2024
1 parent d43adb9 commit fd8775b
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 10 deletions.
9 changes: 7 additions & 2 deletions src/tribler/core/sentry_reporter/sentry_scrubber.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,17 +174,22 @@ def scrub_entity_recursively(self, entity: Union[str, Dict, List, Any], depth=10
if isinstance(entity, dict):
result = {}
for key, value in entity.items():
if key in self.dict_keys_for_scrub:
if isinstance(value, str) and key in self.dict_keys_for_scrub:
value = value.strip()
fake_value = obfuscate_string(value)
placeholder = self.create_placeholder(fake_value)
self.add_sensitive_pair(value, placeholder)
result[key] = self.scrub_entity_recursively(value, depth)
result[key] = placeholder
else:
result[key] = self.scrub_entity_recursively(value, depth)
return result

return entity

def add_sensitive_pair(self, text, placeholder):
if not (text and text.strip()): # We should not attempt to replace empty strings
return

if text in self.sensitive_occurrences:
return

Expand Down
3 changes: 0 additions & 3 deletions src/tribler/core/sentry_reporter/sentry_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,9 +118,6 @@ def obfuscate_string(s: str, part_of_speech: str = 'noun') -> str:
The same random words will be generated for the same given strings.
"""
if not s:
return s

faker = Faker(locale='en_US')
faker.seed_instance(s)
return faker.word(part_of_speech=part_of_speech)
15 changes: 10 additions & 5 deletions src/tribler/core/sentry_reporter/tests/test_sentry_scrubber.py
Original file line number Diff line number Diff line change
Expand Up @@ -306,15 +306,20 @@ def test_scrub_dict(scrubber):
assert scrubber.scrub_entity_recursively(None) is None
assert scrubber.scrub_entity_recursively({}) == {}

given = {'PATH': '/home/username/some/', 'USERDOMAIN': 'UD', 'USERNAME': 'U', 'REPEATED': 'user username UD U'}
assert scrubber.scrub_entity_recursively({'key': [1]}) == {'key': [1]} # non-string values should not lead to crash

given = {'PATH': '/home/username/some/', 'USERDOMAIN': 'UD', 'USERNAME': 'U', 'REPEATED': 'user username UD U',
'key': ''}
assert scrubber.scrub_entity_recursively(given) == {'PATH': '/home/<highlight>/some/',
'REPEATED': 'user <highlight> <school> <night>',
'USERDOMAIN': '<school>',
'USERNAME': '<night>'}
'USERNAME': '<night>',
'key': '<dress>'}

assert 'username' in scrubber.sensitive_occurrences.keys()
assert 'UD' in scrubber.sensitive_occurrences.keys()
assert 'U' in scrubber.sensitive_occurrences.keys()
assert 'username' in scrubber.sensitive_occurrences
assert 'UD' in scrubber.sensitive_occurrences
assert 'U' in scrubber.sensitive_occurrences
assert '' not in scrubber.sensitive_occurrences


def test_scrub_list(scrubber):
Expand Down

0 comments on commit fd8775b

Please sign in to comment.