summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Forcier <jeff@bitprophet.org>2022-05-20 15:10:22 -0400
committerJeff Forcier <jeff@bitprophet.org>2022-05-20 15:10:22 -0400
commitddba5762c9c0878b83fb6a7344ad24ba74af5720 (patch)
tree934dd0038e572bd4a40f75a705f0d0811f76e0c9
parent1150ed2912343cfcd83684a4515422ea06a759b1 (diff)
parent2ea2ed5430b2f5da7b6116ca336ff3c8bc99cc0e (diff)
downloadparamiko-ddba5762c9c0878b83fb6a7344ad24ba74af5720.tar.gz
Merge branch '2.9' into 2.10
-rw-r--r--paramiko/pkey.py2
-rw-r--r--sites/www/changelog.rst4
-rw-r--r--tests/blank_rsa.key0
-rw-r--r--tests/test_pkey.py5
4 files changed, 11 insertions, 0 deletions
diff --git a/paramiko/pkey.py b/paramiko/pkey.py
index f1919660..aa8fa669 100644
--- a/paramiko/pkey.py
+++ b/paramiko/pkey.py
@@ -324,6 +324,8 @@ class PKey(object):
def _read_private_key(self, tag, f, password=None):
lines = f.readlines()
+ if not lines:
+ raise SSHException("no lines in {} private key file".format(tag))
# find the BEGIN tag
start = 0
diff --git a/sites/www/changelog.rst b/sites/www/changelog.rst
index d5bdadec..df438626 100644
--- a/sites/www/changelog.rst
+++ b/sites/www/changelog.rst
@@ -2,6 +2,10 @@
Changelog
=========
+- bug:`1637` (via :issue:`1599`) Raise `SSHException` explicitly when blank
+ private key data is loaded, instead of the natural result of ``IndexError``.
+ This should help more bits of Paramiko or Paramiko-adjacent codebases to
+ correctly handle this class of error. Credit: Nicholas Dietz.
- :release:`2.10.5 <2022-05-16>`
- :release:`2.9.5 <2022-05-16>`
- :bug:`1933` Align signature verification algorithm with OpenSSH re:
diff --git a/tests/blank_rsa.key b/tests/blank_rsa.key
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/tests/blank_rsa.key
diff --git a/tests/test_pkey.py b/tests/test_pkey.py
index 3bc0459a..f8b7eb42 100644
--- a/tests/test_pkey.py
+++ b/tests/test_pkey.py
@@ -186,6 +186,11 @@ class KeyTest(unittest.TestCase):
with pytest.raises(SSHException, match=str(exception)):
RSAKey.from_private_key_file(_support("test_rsa.key"))
+ def test_loading_empty_keys_errors_usefully(self):
+ # #1599 - raise SSHException instead of IndexError
+ with pytest.raises(SSHException, match="no lines"):
+ RSAKey.from_private_key_file(_support("blank_rsa.key"))
+
def test_load_rsa_password(self):
key = RSAKey.from_private_key_file(
_support("test_rsa_password.key"), "television"