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
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to