On Fri, Mar 27, 2026 at 10:54:42 +0100, Peter Krempa via Devel wrote:
> From: Peter Krempa <[email protected]>
> 
> Use 'virFileReadAllQuiet' since the function doesn't want to report
> errors on other code paths.
> 
> The function also assumed that the file which it reads always 7 bytes
> isn't true at least in the test suite. This didn't cause a problem
> because the test data had strings 6 bytes long so it didn't cause a
> write beyond the end of the buffer.
> 
> Clear the newline by using strchrnul instead to find it rather than
> assuming where it is.
> 
> Signed-off-by: Peter Krempa <[email protected]>
> ---
>  src/util/virpci.c | 9 +++++----
>  1 file changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/src/util/virpci.c b/src/util/virpci.c
> index 2e32ed17ff..48cdffe3d4 100644
> --- a/src/util/virpci.c
> +++ b/src/util/virpci.c
> @@ -1760,19 +1760,20 @@ virPCIDeviceReadID(virPCIDevice *dev, const char 
> *id_name)
>  {
>      g_autofree char *path = NULL;
>      g_autofree char *id_str = NULL;
> +    int len;
> 
>      path = virPCIFile(dev->name, id_name);
> 
>      /* ID string is '0xNNNN\n' ... i.e. 7 bytes */
> -    if (virFileReadAll(path, 7, &id_str) < 0)
> +    if ((len = virFileReadAllQuiet(path, 7, &id_str)) < 0)
>          return NULL;
> 
> -    /* Check for 0x suffix */
> +    /* Check for 0x prefix */
>      if (id_str[0] != '0' || id_str[1] != 'x')
>          return NULL;
> 
> -    /* Chop off the newline; we know the string is 7 bytes */
> -    id_str[6] = '\0';
> +    /* Chop off the newline */
> +    *(strchrnul(id_str, '\n')) = '\0';

Gah, this is _GNU_SOURCE, thus OSX and mingw don't like it.

Reply via email to