Firefox may want to switch to using the jemalloc allocator on the Mac. As I understand it, this is tricky because you can't globally replace malloc/free. While in theory it would be possible to replace NS_Free and/or PR_Free, this runs into problems when the code doesn't match its allocators. In particular, I am counting NS_Free, PR_Free, PL_strfree and free as separate deallocators, which might strike you as a bit harsh, as you probably only need to care about NS_Free. Note that nsXPIDLCString and .Adopt() counts as an NS_Free, while nsCRT::strdup counts as a PR_Malloc, and I'm currently lumping PR_smprintf_free in with free, and PORT_Free with whatever it calls.

I instrumented the code and I ran all the mochitests (which include some SSL) and I could only find a few (<20) allocator mismatches in Gecko/Toolkit. By comparison, there are a horrifying number of allocator mismatches in mailnews (nsDirPrefs.cpp on its own manages to use one deallocator for a variable allocated by one of three allocators) and several in libjar, narrowly relegating you to third in a hypothetical "hall of shame". (I haven't filed bugs on mailnews or libjar yet either.)

Using the above criteria, I found the following allocator mismatches under security/*

nsNSSCallbacks.cpp: HandshakeCallback calls Adopt(cipherName) instead of Assign and PORT_Free. In fact, it can leak cipherName.

nsNSSCertificate.cpp: several times it Adopt()s the result of CERT_Hexify, when it should use PORT_Free.

nsNSSIOLayer.cpp: both adopts the result of and allocates an outparam using nsCRT::strdup, when both times it should use NS_strdup, while SSL_RevealURL allocates with PL_strdup but charCleaner uses PR_FREEIF.

nsSSLStatus.cpp: allocates an outparam using PL_strdup, when it should use ToNewCString.

pk12util.c: uses PR_Free for a string allocated with malloc, and PORT_ZFree for a string allocated with PL_strdup.

Would you be interested in patches for some or all of these? Who would want to review them?

--
Warning: May contain traces of nuts.
--
dev-tech-crypto mailing list
dev-tech-crypto@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-tech-crypto

Reply via email to