diff --git a/CHANGES.rst b/CHANGES.rst index fd4f63dd93..9afe7e6e0a 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -10,6 +10,9 @@ https://zope.readthedocs.io/en/2.13/CHANGES.html 4.4.4 (unreleased) ------------------ +- Decrease cookie size for copy/paste clipboard cookie + (`#854 `_) + - Fix ``default`` keyword handling in page templates (`#846 `_) diff --git a/src/OFS/CopySupport.py b/src/OFS/CopySupport.py index 09003eccdd..ef77849c81 100644 --- a/src/OFS/CopySupport.py +++ b/src/OFS/CopySupport.py @@ -23,8 +23,6 @@ from zlib import decompressobj import six -from six.moves.urllib.parse import quote -from six.moves.urllib.parse import unquote import transaction from AccessControl import ClassSecurityInfo @@ -56,6 +54,14 @@ from zope.lifecycleevent import ObjectMovedEvent +try: + from base64 import decodebytes + from base64 import encodebytes +except ImportError: # Python 2 + from base64 import decodestring as decodebytes + from base64 import encodestring as encodebytes + + class CopyError(Exception): pass @@ -671,10 +677,7 @@ def _cb_encode(d): json_bytes = dumps(d).encode('utf-8') squashed_bytes = compress(json_bytes, 2) # -> bytes w/ useful encoding # quote for embeding in cookie - if six.PY2: - return quote(squashed_bytes) - else: - return quote(squashed_bytes.decode('latin-1')) + return encodebytes(squashed_bytes) def _cb_decode(s, maxsize=8192): @@ -686,11 +689,7 @@ def _cb_decode(s, maxsize=8192): Return a list of text IDs. """ dec = decompressobj() - if six.PY2: - squashed = unquote(s) - else: - squashed = unquote(s).encode('latin-1') - data = dec.decompress(squashed, maxsize) + data = dec.decompress(decodebytes(s), maxsize) if dec.unconsumed_tail: raise ValueError json_bytes = data.decode('utf-8')