Hmm. That's an interesting one. Have you seen a case where the
mp_attributes list is not already clear when the destructor is called?
I can see how it could occur if the canonicalisation gets interrupted in
the midst of outputting Attribute nodes. This fix would work nicely,
and I think it should be safe as the code that normally cleans up
ensures mp_attributes is NULL, so it won't get called unnecessarily.
Cheers,
Berin
Vitaly Prapirny wrote:
Hi!
XSECC14n20010315 destructor performs delete [] m_exclNSList[i] but
m_exclNSList items was allocated with strdup and must be released
with free(). And mp_attributes cleanup is absent in code. So I
propose this version of destructor:
XSECC14n20010315::~XSECC14n20010315() {
if (mp_formatter != NULL)
delete mp_formatter;
// Clear out the exclusive namespace list
int size = (int) m_exclNSList.size();
for (int i = 0; i < size; ++i) {
free(m_exclNSList[i]);
}
m_exclNSList.clear();
while (mp_attributes != NULL) {
mp_currentAttribute = mp_attributes->next;
delete mp_attributes;
mp_attributes = mp_currentAttribute;
}
mp_attributes = mp_currentAttribute = mp_firstNonNsAttribute = NULL;
}
Good luck!
Vitaly