summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2018-04-10 14:51:27 +0100
committerEmmanuele Bassi <ebassi@gnome.org>2018-04-10 14:54:45 +0100
commit14c8a603e3b307d2f247764a828d390980854b0d (patch)
tree10d8f95e6ce30d0b1313c4ca23b88c4fa1699555 /modules
parentadc0159bdb733eaa870b8e12a4a14547a8d96407 (diff)
downloadgtk+-14c8a603e3b307d2f247764a828d390980854b0d.tar.gz
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.
Diffstat (limited to 'modules')
-rw-r--r--modules/printbackends/gtkprintbackendcups.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/modules/printbackends/gtkprintbackendcups.c b/modules/printbackends/gtkprintbackendcups.c
index 09e18b170e..52614069d2 100644
--- a/modules/printbackends/gtkprintbackendcups.c
+++ b/modules/printbackends/gtkprintbackendcups.c
@@ -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);
}
}