I think there is an error in the function smiFreeData in lib/data.c.
For a MIB of mine, smidump had a segmentation fault there, while the
memory was being freed on exit. The code is:
if (objectPtr->typePtr) {
if ((objectPtr->typePtr->export.basetype ==
SMI_BASETYPE_OCTETSTRING ||
objectPtr->typePtr->export.basetype ==
SMI_BASETYPE_BITS)) {
smiFree(objectPtr->export.value.value.ptr);
It seems to be the case that for SMI_BASETYPE_OCTETSTRING, the contents
is not a pointer, but an integer, and shouldn't be freed with smiFree.
Then the correct code would be:
if (objectPtr->typePtr) {
if ((objectPtr->typePtr->export.basetype ==
SMI_BASETYPE_OCTETSTRING)) {
smiFree(objectPtr->export.value.value.ptr);