Commit 8f8b68f8 authored by Emmanuele Bassi's avatar Emmanuele Bassi

Terminate strncpy() buffers correctly

When using strncpy() with a buffer we need to account for the
terminating NUL character. GCC 8 started warning when using PPD_MAX_NAME
as the buffer length for strncpy() because the buffer we're copying into
has the same length — which means that the terminating NUL may be
skipped if the source string has a length of PPD_MAX_NAME.

The appropriate way to handle the case where we're copying a source with
a length bigger than of PPD_MAX_NAME is, as reported in the strncpy()
documentation, to copy `PPD_MAX_NAME - 1` bytes, and explicitly NUL
terminate the destination buffer. This has the additional benefit of
avoiding the compiler warning.
parent eb732b3f
......@@ -5645,7 +5645,10 @@ cups_printer_get_options (GtkPrinter *printer,
ppd_name = gtk_paper_size_get_ppd_name (paper_size);
if (ppd_name)
strncpy (ppd_option->defchoice, ppd_name, PPD_MAX_NAME);
{
strncpy (ppd_option->defchoice, ppd_name, PPD_MAX_NAME - 1);
ppd_option->defchoice[PPD_MAX_NAME - 1] = '\0';
}
else
{
gchar *custom_name;
......@@ -5664,7 +5667,8 @@ cups_printer_get_options (GtkPrinter *printer,
* 230.4x142.9"
*/
custom_name = g_strdup_printf (_("Custom %s×%s"), width, height);
strncpy (ppd_option->defchoice, custom_name, PPD_MAX_NAME);
strncpy (ppd_option->defchoice, custom_name, PPD_MAX_NAME - 1);
ppd_option->defchoice[PPD_MAX_NAME - 1] = '\0';
g_free (custom_name);
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment