mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-02-20 05:07:28 -08:00
In my previous commit (adding -r1), I applied a new patch that I've submitted upstream to address a unicode crash with python-3.x. That patch applies cleanly against v1.0.0, but won't actually work: the get_binary_stdin() function it uses exists only in upstream's git master branch. To make the patch work (and to fix some other small issues), I've included the rest of the client changes between v1.0.0 and git master. There are very few of them -- all python-3.x fixes -- so this should not be too objectionable. Bug: https://bugs.gentoo.org/643692 Package-Manager: Portage-2.3.24, Repoman-2.3.6
86 lines
2.7 KiB
Diff
86 lines
2.7 KiB
Diff
From 66225b32d2774cf37fa7f702f7eb26cd94094482 Mon Sep 17 00:00:00 2001
|
|
From: Michael Orlitzky <michael@orlitzky.com>
|
|
Date: Sun, 4 Mar 2018 17:27:01 -0500
|
|
Subject: [PATCH 1/1] scripts/pyzor: replace the client with the git (+ issue
|
|
64 fix) version.
|
|
|
|
---
|
|
scripts/pyzor | 33 +++++++++++++++++++++++++++------
|
|
1 file changed, 27 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/scripts/pyzor b/scripts/pyzor
|
|
index 19b1d21..86c6f7d 100755
|
|
--- a/scripts/pyzor
|
|
+++ b/scripts/pyzor
|
|
@@ -17,9 +17,9 @@ import tempfile
|
|
import threading
|
|
|
|
try:
|
|
- import ConfigParser
|
|
-except ImportError:
|
|
import configparser as ConfigParser
|
|
+except ImportError:
|
|
+ import ConfigParser
|
|
|
|
import pyzor.digest
|
|
import pyzor.client
|
|
@@ -110,7 +110,7 @@ def load_configuration():
|
|
config = ConfigParser.ConfigParser()
|
|
# Set the defaults.
|
|
config.add_section("client")
|
|
- for key, value in defaults.iteritems():
|
|
+ for key, value in defaults.items():
|
|
config.set("client", key, value)
|
|
# Override with the configuration.
|
|
config.read(os.path.join(options.homedir, "config"))
|
|
@@ -171,14 +171,35 @@ def _get_input_digests(dummy):
|
|
|
|
|
|
def _get_input_msg(digester):
|
|
- msg = email.message_from_file(sys.stdin)
|
|
+ msg = email.message_from_bytes(get_binary_stdin().read())
|
|
digested = digester(msg).value
|
|
yield digested
|
|
|
|
|
|
+def _is_binary_reader(stream, default=False):
|
|
+ try:
|
|
+ return isinstance(stream.read(0), bytes)
|
|
+ except Exception:
|
|
+ return default
|
|
+
|
|
+
|
|
+def get_binary_stdin():
|
|
+ # sys.stdin might or might not be binary in some extra cases. By
|
|
+ # default it's obviously non binary which is the core of the
|
|
+ # problem but the docs recommend changing it to binary for such
|
|
+ # cases so we need to deal with it.
|
|
+ is_binary = _is_binary_reader(sys.stdin, False)
|
|
+ if is_binary:
|
|
+ return sys.stdin
|
|
+ buf = getattr(sys.stdin, 'buffer', None)
|
|
+ if buf is not None and _is_binary_reader(buf, True):
|
|
+ return buf
|
|
+ raise RuntimeError('Did not manage to get binary stdin')
|
|
+
|
|
+
|
|
def _get_input_mbox(digester):
|
|
tfile = tempfile.NamedTemporaryFile()
|
|
- tfile.write(sys.stdin.read().encode("utf8"))
|
|
+ tfile.write(get_binary_stdin().read())
|
|
tfile.seek(0)
|
|
mbox = mailbox.mbox(tfile.name)
|
|
for msg in mbox:
|
|
@@ -372,7 +393,7 @@ def genkey(client, servers, config, hash_func=hashlib.sha1):
|
|
return False
|
|
# pylint: disable-msg=W0612
|
|
salt = "".join([chr(random.randint(0, 255))
|
|
- for unused in xrange(hash_func(b"").digest_size)])
|
|
+ for unused in range(hash_func(b"").digest_size)])
|
|
if sys.version_info >= (3, 0):
|
|
salt = salt.encode("utf8")
|
|
salt_digest = hash_func(salt)
|
|
--
|
|
2.13.6
|
|
|