Skip to content
  • Marc-André Lureau's avatar
    util: add slirp_fmt() helpers · 30648c03
    Marc-André Lureau authored
    Various calls to snprintf() in libslirp assume that snprintf() returns
    "only" the number of bytes written (excluding terminating NUL).
    
    https://pubs.opengroup.org/onlinepubs/9699919799/functions/snprintf.html#tag_16_159_04
    
    
    
    "Upon successful completion, the snprintf() function shall return the
    number of bytes that would be written to s had n been sufficiently
    large excluding the terminating null byte."
    
    Introduce slirp_fmt() that handles several pathological cases the
    way libslirp usually expect:
    
    - treat error as fatal (instead of silently returning -1)
    
    - fmt0() will always \0 end
    
    - return the number of bytes actually written (instead of what would
    have been written, which would usually result in OOB later), including
    the ending \0 for fmt0()
    
    - warn if truncation happened (instead of ignoring)
    
    Other less common cases can still be handled with strcpy/snprintf() etc.
    
    Signed-off-by: default avatarMarc-André Lureau <marcandre.lureau@redhat.com>
    Reviewed-by: default avatarSamuel Thibault <samuel.thibault@ens-lyon.org>
    Message-Id: <20200127092414.169796-2-marcandre.lureau@redhat.com>
    30648c03