Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion requirements-base.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ croniter==0.3.37
dataclasses==0.8; python_version <= '3.6'
datadog==0.29.3
django-crispy-forms==1.8.1
django-picklefield==1.0.0
django-picklefield==2.1.0
Django==2.1.15
djangorestframework==3.11.2
email-reply-parser==0.5.12
Expand Down
23 changes: 4 additions & 19 deletions src/sentry/db/models/fields/encrypted.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@


from django.db.models import CharField, TextField
from picklefield.fields import PickledObject, PickledObjectField, _ObjectWrapper, dbsafe_decode
from picklefield.fields import PickledObjectField

from sentry.db.models.fields.jsonfield import JSONField
from sentry.db.models.utils import Creator
Expand Down Expand Up @@ -45,6 +45,8 @@ def to_python(self, value):


class EncryptedPickledObjectField(PickledObjectField):
empty_strings_allowed = True

def get_db_prep_value(self, value, *args, **kwargs):
if isinstance(value, bytes):
value = value.decode("utf-8")
Expand All @@ -54,24 +56,7 @@ def get_db_prep_value(self, value, *args, **kwargs):
def to_python(self, value):
if value is not None and isinstance(value, str):
value = decrypt(value)

# The following below is a copypaste of PickledObjectField.to_python of
# v1.0.0 with one change: We re-raise any baseexceptions such as
# signals. 1.0.0 has a bare `except:` which causes issues.

if value is not None:
try:
value = dbsafe_decode(value, self.compress)
except Exception:
# If the value is a definite pickle; and an error is raised in
# de-pickling it should be allowed to propagate.
if isinstance(value, PickledObject):
raise
else:
if isinstance(value, _ObjectWrapper):
return value._obj

return value
return super().to_python(value)


class EncryptedTextField(TextField):
Expand Down