RFR: 8296812: sprintf is deprecated in Xcode 14 [v12]

Thomas Stuefe stuefe at openjdk.org
Sun Nov 27 08:00:08 UTC 2022


On Tue, 22 Nov 2022 08:02:51 GMT, Kim Barrett <kbarrett at openjdk.org> wrote:

> Given all the near-duplicated checking of os::snprintf results, I think there is a place for a helper function to package this up. Maybe something like
> 
> ```
> // in class os
> // Performs snprintf and asserts the result is non-negative (so there was not
> // an encoding error) and that the output was not truncated.
> static int snprintf_checked(char* buf, size_t len, const char* fmt, ...) ATTRIBUTE_PRINTF(3, 4);
> 
> // in runtime/os.cpp
> int os::snprintf_checked(char* buf, size_t len, const char* fmt, ...) {
>   va_list args;
>   va_start(args, fmt);
>   int result = os::vsnprintf(buf, len, fmt, args);
>   va_end(args);
>   assert(result >= 0, "os::snprintf error");
>   assert(static_cast<size_t>(result) < size, "os::snprintf truncated");
>   return result;
> }
> ```
> 
> (I keep waffling over whether the truncation check should be an assert or a guarantee.)
> 
> I've not yet gone through all the changes yet to consider which should do that checking and which should do something different, such as permitting truncation.
> 
> I'm not wedded to that name; indeed, I don't like it that much, as it's kind of inconveniently long. There's a temptation to have os::snprintf forbid truncation and a different function that allows it, but that would require careful auditing of all pre-existing uses of os::snprintf too, so no.

How about renaming the existing os::snprintf to something like os::snprintf_unchecked, make os::snprintf the checked version, then, in separate RFEs, revert existing uses to the new API. When all uses of os::snprintf_unchecked are cleared up, remove it. 

That would make it possible to revert piecemeal while not racing with new uses of os::snprintf, since new callers will use the new checking API automatically.

-------------

PR: https://git.openjdk.org/jdk/pull/11115


More information about the hotspot-dev mailing list