Fix `KAT(CCM)?Parser` file descriptor leaks
authorEnji Cooper <ngie@FreeBSD.org>
Tue, 21 May 2019 02:30:43 +0000 (02:30 +0000)
committerEnji Cooper <ngie@FreeBSD.org>
Tue, 21 May 2019 02:30:43 +0000 (02:30 +0000)
commita60d9a98927226deb5b7a716892db27dfa3181da
tree8844634aabe5ea0f36fda1cba7b5d9d638682832
parent8c02634818982a172dc0b084b72afc1e4b1ca7ea
Fix `KAT(CCM)?Parser` file descriptor leaks

Make `KAT(CCM)?Parser` into a context suite-capable object by implementing
`__enter__` and `__exit__` methods which manage opening up the file descriptors
and closing them on context exit. This implementation was decided over adding
destructor logic to a `__del__` method, as there are a number of issues around
object lifetimes when dealing with threading cleanup, atexit handlers, and a
number of other less obvious edgecases. Plus, the architected solution is more
pythonic and clean.

Complete the iterator implementation by implementing a `__next__` method for
both classes which handles iterating over the data using a generator pattern,
and by changing `__iter__` to return the object instead of the data which it
would iterate over. Alias the `__next__` method to `next` when working with
python 2.x in order to maintain functional compatibility between the two major
versions.

As part of this work and to ensure readability, push the initialization of the
parser objects up one layer and pass it down to a helper function. This could
have been done via a decorator, but I was trying to keep it simple for other
developers to make it easier to modify in the future.

This fixes ResourceWarnings with python 3.

PR: 237403
MFC after: 1 week
Tested with: python 2.7.16 (amd64), python 3.6.8 (amd64)
tests/sys/opencrypto/cryptodev.py
tests/sys/opencrypto/cryptotest.py