Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 01b1f02

Browse files
committed
Fix segfault if load key from binary fails
1 parent 3eb882d commit 01b1f02

File tree

2 files changed

+47
-1
lines changed

2 files changed

+47
-1
lines changed

src/keys.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ static PyObject* PyXmlSec_KeyFromBinaryFile(PyObject* self, PyObject* args, PyOb
253253
ON_FAIL:
254254
PYXMLSEC_DEBUG("load symmetric key - fail");
255255
Py_XDECREF(key);
256-
Py_DECREF(filepath);
256+
Py_XDECREF(filepath);
257257
return NULL;
258258
}
259259

tests/test_keys.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,18 @@ def test_key_from_memory(self):
1313
key = xmlsec.Key.from_memory(self.load("rsakey.pem"), format=consts.KeyDataFormatPem)
1414
self.assertIsNotNone(key)
1515

16+
def test_key_from_memory_with_bad_args(self):
17+
with self.assertRaises(TypeError):
18+
xmlsec.Key.from_memory(1, format="")
19+
1620
def test_key_from_file(self):
1721
key = xmlsec.Key.from_file(self.path("rsakey.pem"), format=consts.KeyDataFormatPem)
1822
self.assertIsNotNone(key)
1923

24+
def test_key_from_file_with_bad_args(self):
25+
with self.assertRaises(TypeError):
26+
xmlsec.Key.from_file(1, format="")
27+
2028
def test_key_from_fileobj(self):
2129
with open(self.path("rsakey.pem"), "rb") as fobj:
2230
key = xmlsec.Key.from_file(fobj, format=consts.KeyDataFormatPem)
@@ -26,15 +34,29 @@ def test_generate(self):
2634
key = xmlsec.Key.generate(klass=consts.KeyDataAes, size=256, type=consts.KeyDataTypeSession)
2735
self.assertIsNotNone(key)
2836

37+
def test_generate_with_bad_args(self):
38+
with self.assertRaises(TypeError):
39+
xmlsec.Key.generate(klass="", size="", type="")
40+
2941
def test_from_binary_file(self):
3042
key = xmlsec.Key.from_binary_file(klass=consts.KeyDataDes, filename=self.path("deskey.bin"))
3143
self.assertIsNotNone(key)
3244

45+
def test_from_binary_file_with_bad_args(self):
46+
with self.assertRaises(TypeError):
47+
xmlsec.Key.from_binary_file(klass="", filename=1)
48+
3349
def test_load_cert_from_file(self):
3450
key = xmlsec.Key.from_file(self.path("rsakey.pem"), format=consts.KeyDataFormatPem)
3551
self.assertIsNotNone(key)
3652
key.load_cert_from_file(self.path("rsacert.pem"), format=consts.KeyDataFormatPem)
3753

54+
def test_load_cert_from_file_with_bad_args(self):
55+
key = xmlsec.Key.from_file(self.path("rsakey.pem"), format=consts.KeyDataFormatPem)
56+
self.assertIsNotNone(key)
57+
with self.assertRaises(TypeError):
58+
key.load_cert_from_file(1, format="")
59+
3860
def test_load_cert_from_fileobj(self):
3961
key = xmlsec.Key.from_file(self.path("rsakey.pem"), format=consts.KeyDataFormatPem)
4062
self.assertIsNotNone(key)
@@ -46,8 +68,15 @@ def test_load_cert_from_memory(self):
4668
self.assertIsNotNone(key)
4769
key.load_cert_from_memory(self.load("rsacert.pem"), format=consts.KeyDataFormatPem)
4870

71+
def test_load_cert_from_memory_with_bad_args(self):
72+
key = xmlsec.Key.from_file(self.path("rsakey.pem"), format=consts.KeyDataFormatPem)
73+
self.assertIsNotNone(key)
74+
with self.assertRaises(TypeError):
75+
key.load_cert_from_memory(1, format="")
76+
4977
def test_name(self):
5078
key = xmlsec.Key.from_file(self.path("rsakey.pem"), format=consts.KeyDataFormatPem)
79+
self.assertIsNone(key.name)
5180
key.name = "rsakey"
5281
self.assertEqual("rsakey", key.name)
5382

@@ -64,16 +93,33 @@ def test_add_key(self):
6493
mngr = xmlsec.KeysManager()
6594
mngr.add_key(key)
6695

96+
def test_add_key_with_bad_args(self):
97+
mngr = xmlsec.KeysManager()
98+
with self.assertRaises(TypeError):
99+
mngr.add_key("")
100+
67101
def test_load_cert(self):
68102
mngr = xmlsec.KeysManager()
69103
mngr.add_key(xmlsec.Key.from_file(self.path("rsakey.pem"), format=consts.KeyDataFormatPem))
70104
mngr.load_cert(self.path("rsacert.pem"), format=consts.KeyDataFormatPem, type=consts.KeyDataTypeTrusted)
71105

106+
def test_load_cert_with_bad_args(self):
107+
mngr = xmlsec.KeysManager()
108+
mngr.add_key(xmlsec.Key.from_file(self.path("rsakey.pem"), format=consts.KeyDataFormatPem))
109+
with self.assertRaises(TypeError):
110+
mngr.load_cert(1, format="", type="")
111+
72112
def test_load_cert_from_memory(self):
73113
mngr = xmlsec.KeysManager()
74114
mngr.add_key(xmlsec.Key.from_file(self.path("rsakey.pem"), format=consts.KeyDataFormatPem))
75115
mngr.load_cert_from_memory(self.load("rsacert.pem"), format=consts.KeyDataFormatPem, type=consts.KeyDataTypeTrusted)
76116

117+
def test_load_cert_from_memory_with_bad_args(self):
118+
mngr = xmlsec.KeysManager()
119+
mngr.add_key(xmlsec.Key.from_file(self.path("rsakey.pem"), format=consts.KeyDataFormatPem))
120+
with self.assertRaises(TypeError):
121+
mngr.load_cert_from_memory(1, format="", type="")
122+
77123
def test_load_invalid_key(self):
78124
mngr = xmlsec.KeysManager()
79125
with self.assertRaises(ValueError):

0 commit comments

Comments
 (0)