On Thu, Aug 03, 2023 at 09:35:20PM +0200, Thomas Haller wrote: > When we create a Nftables instance against an older library version, > we might not find a symbol and fail with an exception when initializing > the context object. > > Then, __del__() is still called, but resulting in a second exception > because self.__ctx is not set. Avoid that second exception. > > $ python -c 'import nftables; nftables.Nftables()' > Traceback (most recent call last): > File "<string>", line 1, in <module> > File "/data/src/nftables/py/nftables.py", line 90, in __init__ > self.nft_ctx_input_get_flags = lib.nft_ctx_input_get_flags > ^^^^^^^^^^^^^^^^^^^^^^^^^^^ > File "/usr/lib64/python3.11/ctypes/__init__.py", line 389, in __getattr__ > func = self.__getitem__(name) > ^^^^^^^^^^^^^^^^^^^^^^ > File "/usr/lib64/python3.11/ctypes/__init__.py", line 394, in __getitem__ > func = self._FuncPtr((name_or_ordinal, self)) > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > AttributeError: /lib64/libnftables.so.1: undefined symbol: nft_ctx_input_get_flags > Exception ignored in: <function Nftables.__del__ at 0x7f6315a2c540> > Traceback (most recent call last): > File "/data/src/nftables/py/nftables.py", line 166, in __del__ > self.nft_ctx_free(self.__ctx) > ^^^^^^^^^^^^^^^^^ > AttributeError: 'Nftables' object has no attribute 'nft_ctx_free' > > Signed-off-by: Thomas Haller <thaller@xxxxxxxxxx> Reviewed-by: Phil Sutter <phil@xxxxxx>