On 12/12/2013 6:52 PM, David Keeler wrote:
Recently bug 539710 landed[0] to fix an unnecessary and apparently unsafe operation:const PRUnichar *comma = NS_LITERAL_STRING(",").get(); Curious, I did a quick search for other examples of NS_LITERAL_STRING combined with .get() and found that this appears to be common[1]. So, I have a few questions for anyone with some insight: - Is this pattern always unsafe? - Is it sometimes unsafe? (if so, when/why?)
NS_LITERAL_STRING creates a temporary object that is cleaned up at the end of the statement. So it's a safe pattern for passing as an argument to a function, but not for initializing a variable.
- Should we do some cleanup and avoid things like this? (or maybe this is an outdated concern and isn't an issue anymore?)
Given that PRUnichar is now unconditionally typedef'd to our version of char16_t (and the patch has landed for a long while without being backed out yet), I think we should now be able to use MOZ_UTF16(",") instead of NS_LITERAL_STRING(",").get(). MOZ_UTF16 is basically a choice between using L"" or U"" depending on compiler support for char16_t and thus is always safe.
-- Joshua Cranmer Thunderbird and DXR developer Source code archæologist _______________________________________________ dev-platform mailing list [email protected] https://lists.mozilla.org/listinfo/dev-platform

