Fix #7047 Safely handle setlocale#8735
Merged
acozzette merged 2 commits intoprotocolbuffers:masterfrom Jul 8, 2021
Merged
Conversation
0fe68a4 to
8d1cc39
Compare
|
@florin-crisan It looks like your pull request updates the googletest submodule and that is causing some tests to fail. Would you mind updating the PR to avoid changing googletest? |
`setlocale` returns a pointer to a buffer containing the current locale name. This needs to be copied into a `std::string` or it will be overwritten by the next call. Trying to call `setlocale` with a non-null, invalid pointer can have unpredictable results, such as ``` [ RUN ] StringPrintfTest.Multibyte minkernel\crts\ucrt\src\appcrt\convert\mbstowcs.cpp(246) : Assertion failed: (pwcs == nullptr && sizeInWords == 0) || (pwcs != nullptr && sizeInWords > 0) ``` `setlocale` can also return a `nullptr` if it fails, but we assert against that.
Prefer safer alternative to naked pointers. This is a follow-up to 1dd313c
Contributor
Author
As explained on ee0e153, the whole reason for the update was that I couldn't compile with Visual C++ 2019. But I will try it your way and let somebody else deal with the update, if it's that tricky. |
8d1cc39 to
64cb893
Compare
|
Thanks, @florin-crisan! I think it would be OK to update googletest in another pull request but we would just need to make sure all the tests still pass. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
setlocalereturns a pointer to a buffer containing the current locale name.This needs to be copied into a
std::stringor it will be overwritten by the next call.Trying to call
setlocalewith a non-null, invalid pointer can have unpredictable results, such as #7074setlocalecan also return anullptrif it fails, but we assert against that.