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


Reply via email to