Hmm. It looks like my initial read may not have been entirely correct. I
think I've got it now.
Daniel Stenberg wrote:
How exactly is the ->lud_attrs pointer freed twice? With you assigning
it to NULL everywhere on errors you instead introduce memory leaks since
it'll skip freeing completely. Or am I reading it wrong?
After reading this again, I don't think ->lud_attrs is freed twice.
Rather, the elements of ->lud_attrs are freed when they shouldn't be if
the function exits with an error.
Bonus issue: unescape_elements() goes through several pointers and
replaces them with "unescaped" versions. The only problem there is that
curl_easy_unescape() returns a newly allocated string and the function
doesn't free the previous strings that were unescaped and no longer
used. It so looks like a memory leak to me!
Yes. This made it harder to read for me. Upon success
_ldap_free_urldesc() was properly freeing elements of ->lud_attrs that
had been allocated by unescape_elements. Upon error, those elements had
been populated by strtok_r and didn't need to be freed but were being
freed anyway.
So I think the right fix is to free the array but not the individual
elements whenever we're returning an error code prior to the
unescape_elements() call.
Does that match your read? If so I'll rewrite the patch.
Thanks,
Geoff
-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette: http://curl.haxx.se/mail/etiquette.html