RFR: 8196882: VS2017 Hotspot Defined vsnprintf Function Causes C2084 Already Defined Compilation Error

Kim Barrett kim.barrett at oracle.com
Thu Feb 22 02:34:22 UTC 2018

> On Feb 21, 2018, at 8:47 PM, Kim Barrett <kim.barrett at oracle.com> wrote:
>> On Feb 21, 2018, at 2:30 AM, Thomas Stüfe <thomas.stuefe at gmail.com> wrote:
>> src/hotspot/share/prims/jvm.cpp
>> Small behaviour change for input buffers of 0 and format strings of "". Before we returned -1, now (I guess) 0. Does any existing caller care? I looked but could not find anyone even checking the return code, so it is probably nothing.
> You are right, that’s a change.  Well spotted.
> I think the old behavior here, which matches the documentation, is
> probably preferable; it indicates we didn't even write a terminating
> NUL, so the buffer may not be terminated.  I'm going to change
> os::vsnprintf accordingly.  Of course, this is very much a corner case,
> since an empty format string is pretty rare.  But it could also arise with,
> for example, a format string of “%s” with an empty argument string.

While dealing with this I noticed the Visual Studio documentation for
_vsnprintf varies quite a bit from version to version in the description
of what happens with a 0 buffer size (including being an error in some
versions).  As a result, both the VS and POSIX versions of os::vsnprintf
will now just special case 0 buffer size and always return -1 for that,
indicating that not even the terminating NUL was written.  Good thing
you made me revisit that.

More information about the hotspot-dev mailing list