summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-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 585cb74a..0566efc0 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 29754bc3..920bca10 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.11.0 <2022-05-16>`
- :release:`2.10.5 <2022-05-16>`
- :release:`2.9.5 <2022-05-16>`
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 738e8cf0..a2376fa9 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"