[Spice-devel] [vdagent-win PATCH] file-xfer: handle_start: use snprintf instead of sprintf_s
Uri Lublin
uril at redhat.com
Thu Feb 28 09:09:14 UTC 2019
On 2/25/19 4:12 PM, Frediano Ziglio wrote:
>>
>> When building with older mingw, sprintf_s does not
>> always work as expected, but snprintf does.
>>
>> Also it's more consistent in the file.
>>
>> Note that when building with VS, snprintf becomes sprintf_s
>>
>
> I think this could be a bug, from documentation:
>
> "If the buffer is too small for the formatted text, including the terminating null, then the buffer is set to an empty string by placing a null character at buffer[0], and the invalid parameter handler is invoked"
>
> which is different from snprintf behaviour, _snprintf is probably what do we want.
Actually, I think we do want snprintf's behavior, not _snprintf.
_snprintf does not guarantee null termination of the string.
We should probably check the return value.
Also we can add a check that there is enough space and fail early.
Uri.
>
>> Related: rhbz#1410181
>>
>> Signed-off-by: Uri Lublin <uril at redhat.com>
>> ---
>> vdagent/file_xfer.cpp | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/vdagent/file_xfer.cpp b/vdagent/file_xfer.cpp
>> index ada3b47..c456bbe 100644
>> --- a/vdagent/file_xfer.cpp
>> +++ b/vdagent/file_xfer.cpp
>> @@ -113,7 +113,7 @@ void FileXfer::handle_start(VDAgentFileXferStartMessage*
>> start,
>> if (attempt == 0) {
>> strcpy(dest_filename, file_name);
>> } else {
>> - sprintf_s(dest_filename, SPICE_N_ELEMENTS(dest_filename),
>> + snprintf(dest_filename, sizeof(dest_filename),
>> "%.*s (%d)%s", int(extension - file_name), file_name,
>> attempt, extension);
>> }
>> if ((MultiByteToWideChar(CP_UTF8, 0, dest_filename, -1, file_path +
>> wlen, MAX_PATH - wlen)) == 0) {
>
> Frediano
>
More information about the Spice-devel
mailing list