From 364631626bb78a40c1a1c70d5502ab0e953a7829 Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Mon, 18 Feb 2019 17:48:54 +0100 Subject: pylibfdt: Test fdt.setprop take bytes on Python 3, add error handling Signed-off-by: Petr Viktorin Message-Id: <20190218164856.23861-3-frenzy@frenzy.cz> Signed-off-by: David Gibson --- pylibfdt/libfdt.i | 4 ++++ tests/pylibfdt_tests.py | 12 +++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/pylibfdt/libfdt.i b/pylibfdt/libfdt.i index 084bc5b..4f14403 100644 --- a/pylibfdt/libfdt.i +++ b/pylibfdt/libfdt.i @@ -1084,6 +1084,10 @@ typedef uint32_t fdt32_t; /* typemap used for fdt_setprop() */ %typemap(in) (const void *val) { %#if PY_VERSION_HEX >= 0x03000000 + if (!PyBytes_Check($input)) { + SWIG_exception_fail(SWIG_TypeError, "bytes expected in method '" "$symname" + "', argument " "$argnum"" of type '" "$type""'"); + } $1 = PyBytes_AsString($input); %#else $1 = PyString_AsString($input); /* char *str */ diff --git a/tests/pylibfdt_tests.py b/tests/pylibfdt_tests.py index 4761c52..e6c13ff 100644 --- a/tests/pylibfdt_tests.py +++ b/tests/pylibfdt_tests.py @@ -82,6 +82,8 @@ TEST_VALUE64_1 = (TEST_VALUE64_1H << 32) | TEST_VALUE64_1L PHANDLE_1 = 0x2000 PHANDLE_2 = 0x2001 +TEST_BYTES_1 = b'hello world' + TEST_STRING_1 = 'hello world' TEST_STRING_2 = 'hi world' TEST_STRING_3 = u'unicode \u01d3' @@ -443,21 +445,21 @@ class PyLibfdtBasicTests(unittest.TestCase): def testSetProp(self): """Test that we can update and create properties""" node = self.fdt.path_offset('/subnode@1') - self.fdt.setprop(node, 'compatible', TEST_STRING_1) - self.assertEquals(TEST_STRING_1, self.fdt.getprop(node, 'compatible')) + self.fdt.setprop(node, 'compatible', TEST_BYTES_1) + self.assertEquals(TEST_BYTES_1, self.fdt.getprop(node, 'compatible')) # Check that this property is missing, and that we don't have space to # add it self.assertEquals(-libfdt.NOTFOUND, self.fdt.getprop(node, 'missing', QUIET_NOTFOUND)) self.assertEquals(-libfdt.NOSPACE, - self.fdt.setprop(node, 'missing', TEST_STRING_1, + self.fdt.setprop(node, 'missing', TEST_BYTES_1, quiet=(libfdt.NOSPACE,))) # Expand the device tree so we now have room self.fdt.resize(self.fdt.totalsize() + 50) - self.fdt.setprop(node, 'missing', TEST_STRING_1) - self.assertEquals(TEST_STRING_1, self.fdt.getprop(node, 'missing')) + self.fdt.setprop(node, 'missing', TEST_BYTES_1) + self.assertEquals(TEST_BYTES_1, self.fdt.getprop(node, 'missing')) def testSetPropU32(self): """Test that we can update and create integer properties""" -- cgit v1.2.1