forked from AuroraMiddleware/gtk
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.
This commit is contained in:
parent
adc0159bdb
commit
14c8a603e3
@ -5590,7 +5590,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;
|
||||
@ -5609,7 +5612,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);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user