diff options
author | Robin Watts <Robin.Watts@artifex.com> | 2022-02-16 13:06:13 +0000 |
---|---|---|
committer | Robin Watts <Robin.Watts@artifex.com> | 2022-02-16 17:00:43 +0000 |
commit | b3173bfc5f5d60adcb80c10d7ce4cdd1492dfea9 (patch) | |
tree | 3a24d6320d96347603de6b2d6ff97113b8251a66 /devices | |
parent | 99cc9af68c770cd551025249b760630b2a9e9fb0 (diff) | |
download | ghostpdl-b3173bfc5f5d60adcb80c10d7ce4cdd1492dfea9.tar.gz |
Move devices from gs_sprintf to gs_snprintf.
Diffstat (limited to 'devices')
32 files changed, 202 insertions, 200 deletions
diff --git a/devices/gdev8510.c b/devices/gdev8510.c index 534435c04..40c9ab804 100644 --- a/devices/gdev8510.c +++ b/devices/gdev8510.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -134,7 +134,7 @@ m8510_output_run(gx_device_printer *pdev, /* Transfer the line of data. */ count = out_end - out; if (count > 0) { - gs_sprintf(tmp, "\033g%03d", count/8); + gs_snprintf(tmp, sizeof(tmp), "\033g%03d", count/8); gp_fwrite(tmp, 1, 5, prn_stream); gp_fwrite(out, 1, count, prn_stream); gp_fwrite("\r", 1, 1, prn_stream); diff --git a/devices/gdevccr.c b/devices/gdevccr.c index 03fcfa59d..4f1386593 100644 --- a/devices/gdevccr.c +++ b/devices/gdevccr.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -220,9 +220,9 @@ static int alloc_rb( gs_memory_t *mem, cmyrow **rb, int rows) int r; for(r=0; r<rows; r++) { - gs_sprintf((*rb)[r].cname, "C%02x", r); - gs_sprintf((*rb)[r].mname, "M%02x", r); - gs_sprintf((*rb)[r].yname, "Y%02x", r); + gs_snprintf((*rb)[r].cname, sizeof((*rb)[r].cname), "C%02x", r); + gs_snprintf((*rb)[r].mname, sizeof((*rb)[r].mname), "M%02x", r); + gs_snprintf((*rb)[r].yname, sizeof((*rb)[r].yname), "Y%02x", r); (*rb)[r].is_used=0; } return 0; diff --git a/devices/gdevdjet.c b/devices/gdevdjet.c index 1ded0813e..d2f936d19 100644 --- a/devices/gdevdjet.c +++ b/devices/gdevdjet.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -330,7 +330,7 @@ ljet4pjl_close(gx_device *pdev) init string is stored in buf, so make sure that buf is at least 5 bytes larger than str. */ static void -hpjet_make_init(gx_device_printer *pdev, char *buf, const char *str) +hpjet_make_init(gx_device_printer *pdev, char buf[80], const char *str) { gx_device_hpjet *dev = (gx_device_hpjet *)pdev; int paper_source = -1; @@ -339,9 +339,9 @@ hpjet_make_init(gx_device_printer *pdev, char *buf, const char *str) else if (dev->MediaPosition_set && dev->MediaPosition >= 0) paper_source = dev->MediaPosition; if (paper_source >= 0) - gs_sprintf(buf, "%s\033&l%dH", str, paper_source); + gs_snprintf(buf, 80, "%s\033&l%dH", str, paper_source); else - gs_sprintf(buf, "%s", str); + gs_snprintf(buf, 80, "%s", str); } /* The DeskJet can compress (mode 2) */ @@ -377,7 +377,7 @@ fs600_print_page_copies(gx_device_printer * pdev, gp_file * prn_stream, char base_init[60]; char init[80]; - gs_sprintf(base_init, "\033*r0F\033&u%dD", dots_per_inch); + gs_snprintf(base_init, sizeof(base_init), "\033*r0F\033&u%dD", dots_per_inch); hpjet_make_init(pdev, init, base_init); return dljet_mono_print_page_copies(pdev, prn_stream, num_copies, dots_per_inch, PCL_FS600_FEATURES, @@ -441,7 +441,7 @@ ljet3d_print_page_copies(gx_device_printer * pdev, gp_file * prn_stream, bool tumble=dev->Tumble; hpjet_make_init(pdev, init, "\033&l-180u36Z\033*r0F"); - gs_sprintf(even_init, "\033&l180u36Z\033*r0F"); + gs_snprintf(even_init, sizeof(even_init), "\033&l180u36Z\033*r0F"); return dljet_mono_print_page_copies(pdev, prn_stream, num_copies, 300, PCL_LJ3D_FEATURES, init, even_init, tumble); } @@ -456,9 +456,9 @@ ljet4_print_page_copies(gx_device_printer * pdev, gp_file * prn_stream, char base_init[60]; char init[80]; - gs_sprintf(base_init, "\033&l-180u36Z\033*r0F\033&u%dD", dots_per_inch); + gs_snprintf(base_init, sizeof(base_init), "\033&l-180u36Z\033*r0F\033&u%dD", dots_per_inch); if (gdev_pcl_page_orientation((gx_device *) pdev) == PAGE_ORIENTATION_LANDSCAPE) - gs_sprintf(base_init, "\033&l0u140Z\033*r0F\033&u%dD", dots_per_inch); + gs_snprintf(base_init, sizeof(base_init), "\033&l0u140Z\033*r0F\033&u%dD", dots_per_inch); hpjet_make_init(pdev, init, base_init); return dljet_mono_print_page_copies(pdev, prn_stream, num_copies, @@ -490,9 +490,9 @@ ljet4d_print_page_copies(gx_device_printer * pdev, gp_file * prn_stream, in duplex mode we set this parameters for each odd page (paper tray is set by "hpjet_make_init") */ - gs_sprintf(base_init, "\033&l-180u36Z\033*r0F\033&u%dD", dots_per_inch); + gs_snprintf(base_init, sizeof(base_init), "\033&l-180u36Z\033*r0F\033&u%dD", dots_per_inch); hpjet_make_init(pdev, init, base_init); - gs_sprintf(even_init, "\033&l180u36Z\033*r0F\033&u%dD", dots_per_inch); + gs_snprintf(even_init, sizeof(even_init), "\033&l180u36Z\033*r0F\033&u%dD", dots_per_inch); return dljet_mono_print_page_copies(pdev, prn_stream, num_copies, dots_per_inch, PCL_LJ4D_FEATURES, init,even_init,tumble); @@ -507,7 +507,7 @@ ljet4pjl_print_page_copies(gx_device_printer *pdev, gp_file *prn_stream, { int dots_per_inch = (int)pdev->y_pixels_per_inch; char real_init[60]; - gs_sprintf(real_init, "\033&l-180u36Z\033*r0F\033&u%dD", dots_per_inch); + gs_snprintf(real_init, sizeof(real_init), "\033&l-180u36Z\033*r0F\033&u%dD", dots_per_inch); return dljet_mono_print_page_copies(pdev, prn_stream, num_copies, dots_per_inch, PCL_LJ4PJL_FEATURES, real_init, real_init, false); diff --git a/devices/gdevijs.c b/devices/gdevijs.c index 0252e3b5e..3851f911c 100644 --- a/devices/gdevijs.c +++ b/devices/gdevijs.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -633,7 +633,7 @@ gsijs_set_margin_params(gx_device_ijs *ijsdev) } if (code == 0) { - gs_sprintf (buf, "%gx%g", ijsdev->MediaSize[0] * (1.0 / 72), + gs_snprintf (buf, sizeof(buf), "%gx%g", ijsdev->MediaSize[0] * (1.0 / 72), ijsdev->MediaSize[1] * (1.0 / 72)); code = ijs_client_set_param(ijsdev->ctx, 0, "PaperSize", buf, strlen(buf)); @@ -678,7 +678,7 @@ gsijs_set_margin_params(gx_device_ijs *ijsdev) m[1] = ijsdev->MediaSize[1] * (1.0 / 72) - printable_top - printable_height; gx_device_set_margins((gx_device *)ijsdev, m, true); - gs_sprintf (buf, "%gx%g", printable_left, printable_top); + gs_snprintf (buf, sizeof(buf), "%gx%g", printable_left, printable_top); code = ijs_client_set_param(ijsdev->ctx, 0, "TopLeft", buf, strlen(buf)); } @@ -848,7 +848,7 @@ gsijs_open(gx_device *dev) /* Note: dup() may not be portable to all interesting IJS platforms. In that case, this branch should be #ifdef'ed out. */ - gs_sprintf(buf, "%d", fd); + gs_snprintf(buf, sizeof(buf), "%d", fd); ijs_client_set_param(ijsdev->ctx, 0, "OutputFD", buf, strlen(buf)); close(fd); } else { @@ -1013,9 +1013,9 @@ gsijs_output_page(gx_device *dev, int num_copies, int flush) } /* Required page parameters */ - gs_sprintf(buf, "%d", n_chan); + gs_snprintf(buf, sizeof(buf), "%d", n_chan); gsijs_client_set_param(ijsdev, "NumChan", buf); - gs_sprintf(buf, "%d", ijsdev->BitsPerSample); + gs_snprintf(buf, sizeof(buf), "%d", ijsdev->BitsPerSample); gsijs_client_set_param(ijsdev, "BitsPerSample", buf); /* This needs to become more sophisticated for DeviceN. */ @@ -1023,12 +1023,12 @@ gsijs_output_page(gx_device *dev, int num_copies, int flush) ((n_chan == 3) ? (krgb_mode ? ((k_bits == 1) ? "KRGB" : "KxRGB") : "DeviceRGB") : "DeviceGray")); gsijs_client_set_param(ijsdev, "ColorSpace", buf); - gs_sprintf(buf, "%d", ijs_width); + gs_snprintf(buf, sizeof(buf), "%d", ijs_width); gsijs_client_set_param(ijsdev, "Width", buf); - gs_sprintf(buf, "%d", ijs_height); + gs_snprintf(buf, sizeof(buf), "%d", ijs_height); gsijs_client_set_param(ijsdev, "Height", buf); - gs_sprintf(buf, "%gx%g", xres, yres); + gs_snprintf(buf, sizeof(buf), "%gx%g", xres, yres); gsijs_client_set_param(ijsdev, "Dpi", buf); #ifdef KRGB_DEBUG diff --git a/devices/gdevl31s.c b/devices/gdevl31s.c index 8832c13ac..ef4151c6f 100644 --- a/devices/gdevl31s.c +++ b/devices/gdevl31s.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -191,9 +191,9 @@ lj3100sw_print_page_copies(gx_device_printer *pdev, gp_file *prn_stream, int num if (gdev_prn_file_is_new(pdev)) { lj3100sw_output_section_header(prn_stream, 1, 0, 0); lj3100sw_output_repeated_data_bytes(prn_stream, buffer, &ptr, 0x1b, 12); - ptr += gs_sprintf(ptr, "\r\nBD"); + ptr += gs_snprintf(ptr, sizeof(ptr), "\r\nBD"); lj3100sw_output_repeated_data_bytes(prn_stream, buffer, &ptr, 0, 5520); - ptr += gs_sprintf(ptr, "%s\r\n%s %d\r\n%s %d\r\n%s %d\r\n%s %d\r\n%s %d\r\n%s %d\r\n", + ptr += gs_snprintf(ptr, sizeof(ptr), "%s\r\n%s %d\r\n%s %d\r\n%s %d\r\n%s %d\r\n%s %d\r\n%s %d\r\n", "NJ", "PQ", -1, "RE", high_resolution ? 6 : 2, @@ -205,7 +205,7 @@ lj3100sw_print_page_copies(gx_device_printer *pdev, gp_file *prn_stream, int num } lj3100sw_output_section_header(prn_stream, 3, ppdev->NumCopies, 0); - ptr += gs_sprintf(ptr, "%s %d\r\n%s\r\n", + ptr += gs_snprintf(ptr, sizeof(ptr), "%s %d\r\n%s\r\n", "CM", 1, "PD"); *ptr++ = 0; diff --git a/devices/gdevpdfimg.c b/devices/gdevpdfimg.c index a230f6a5c..fe3fcf9da 100644 --- a/devices/gdevpdfimg.c +++ b/devices/gdevpdfimg.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -603,7 +603,7 @@ pdf_image_downscale_and_print_page(gx_device_printer *dev, pprintd1(pdf_dev->strm, "%d 0 obj\n", page->PageDictObjectNumber); pprintd1(pdf_dev->strm, "<<\n/Contents %d 0 R\n", page->PageStreamObjectNumber); stream_puts(pdf_dev->strm, "/Type /Page\n/Parent 2 0 R\n"); - gs_sprintf(Buffer, "/MediaBox [0 0 %f %f]\n", ((double)pdf_dev->width / pdf_dev->HWResolution[0]) * 72, ((double)pdf_dev->height / pdf_dev->HWResolution[1]) * 72); + gs_snprintf(Buffer, sizeof(Buffer), "/MediaBox [0 0 %f %f]\n", ((double)pdf_dev->width / pdf_dev->HWResolution[0]) * 72, ((double)pdf_dev->height / pdf_dev->HWResolution[1]) * 72); stream_puts(pdf_dev->strm, Buffer); pprintd1(pdf_dev->strm, "/Resources <<\n/XObject <<\n/Im1 %d 0 R\n>>\n", page->ImageObjectNumber); if (pdf_dev->ocr.file_init) @@ -699,7 +699,7 @@ static void write_xref_entry (stream *s, gs_offset_t Offset) if (Offset > 9999999999){ Offset = 0; } - gs_sprintf(O, "%d", Offset); + gs_snprintf(O, sizeof(O), "%d", Offset); for (i=0; i< (10 - strlen(O)); i++) stream_puts(s, "0"); stream_puts(s, O); @@ -713,7 +713,7 @@ pdf_store_default_Producer(char *buf) int minor = (int)(gs_revision - (major * 1000)) / 10; int patch = gs_revision % 10; - gs_sprintf(buf, "(%s %d.%02d.%d)", gs_product, major, minor, patch); + gs_snprintf(buf, sizeof(buf), "(%s %d.%02d.%d)", gs_product, major, minor, patch); } static int pdf_image_finish_file(gx_device_pdf_image *pdf_dev, int PCLm) @@ -759,7 +759,7 @@ static int pdf_image_finish_file(gx_device_pdf_image *pdf_dev, int PCLm) tms = *localtime(&t); #endif - gs_sprintf(CreationDate, "(D:%04d%02d%02d%02d%02d%02d%c%02d\'%02d\')", + gs_snprintf(CreationDate, sizeof(CreationDate), "(D:%04d%02d%02d%02d%02d%02d%c%02d\'%02d\')", tms.tm_year + 1900, tms.tm_mon + 1, tms.tm_mday, tms.tm_hour, tms.tm_min, tms.tm_sec, timesign, timeoffset / 60, timeoffset % 60); @@ -1475,7 +1475,7 @@ PCLm_downscale_and_print_page(gx_device_printer *dev, pprintd1(pdf_dev->strm, "%d 0 obj\n", page->PageDictObjectNumber); pprintd1(pdf_dev->strm, "<<\n/Contents %d 0 R\n", page->PageStreamObjectNumber); stream_puts(pdf_dev->strm, "/Type /Page\n/Parent 2 0 R\n"); - gs_sprintf(Buffer, "/MediaBox [0 0 %.3f %.3f]\n", ((double)pdf_dev->width / pdf_dev->HWResolution[0]) * 72, ((double)pdf_dev->height / pdf_dev->HWResolution[1]) * 72); + gs_snprintf(Buffer, sizeof(Buffer), "/MediaBox [0 0 %.3f %.3f]\n", ((double)pdf_dev->width / pdf_dev->HWResolution[0]) * 72, ((double)pdf_dev->height / pdf_dev->HWResolution[1]) * 72); stream_puts(pdf_dev->strm, Buffer); stream_puts(pdf_dev->strm, "/Resources <<\n/XObject <<\n"); @@ -1494,9 +1494,9 @@ PCLm_downscale_and_print_page(gx_device_printer *dev, double adjusted; adjusted = height - (row * pdf_dev->StripHeight); adjusted = adjusted / (pdf_dev->HWResolution[1] / (factor * 72)); - gs_sprintf(Buffer, "%.3f 0 0 %.3f 0 0 cm\n/Im%d Do Q\n", (width / (pdf_dev->HWResolution[0] / 72)) * factor, adjusted, row); + gs_snprintf(Buffer, sizeof(Buffer), "%.3f 0 0 %.3f 0 0 cm\n/Im%d Do Q\n", (width / (pdf_dev->HWResolution[0] / 72)) * factor, adjusted, row); } else - gs_sprintf(Buffer, "%.3f 0 0 %.3f 0 %f cm\n/Im%d Do Q\n", (width / (pdf_dev->HWResolution[0] / 72)) * factor, StripDecrement, ((height / (pdf_dev->HWResolution[1] / 72)) * factor) - (StripDecrement * (row + 1)), row); + gs_snprintf(Buffer, sizeof(Buffer), "%.3f 0 0 %.3f 0 %f cm\n/Im%d Do Q\n", (width / (pdf_dev->HWResolution[0] / 72)) * factor, StripDecrement, ((height / (pdf_dev->HWResolution[1] / 72)) * factor) - (StripDecrement * (row + 1)), row); stream_puts(pdf_dev->temp_stream.strm, Buffer); pprintd2(pdf_dev->strm, "/Im%d %d 0 R\n", row, page->ImageObjectNumber + (row * 2)); } diff --git a/devices/gdevpdfocr.c b/devices/gdevpdfocr.c index 8dd5a5994..ff60c1203 100644 --- a/devices/gdevpdfocr.c +++ b/devices/gdevpdfocr.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -544,20 +544,20 @@ flush_word(gx_device_pdf_image *dev) size = bbox[3]-bbox[1]; if (dev->ocr.cur_size != size) { - gs_sprintf(buffer, "/Ft0 %.3f Tf", size); + gs_snprintf(buffer, sizeof(buffer), "/Ft0 %.3f Tf", size); stream_puts(dev->strm, buffer); dev->ocr.cur_size = size; } scale = (bbox[2]-bbox[0]) / size / len * 200; if (dev->ocr.cur_scale != scale) { - gs_sprintf(buffer, " %.3f Tz", scale); + gs_snprintf(buffer, sizeof(buffer), " %.3f Tz", scale); stream_puts(dev->strm, buffer); dev->ocr.cur_scale = scale; } - gs_sprintf(buffer, " 1 0 0 1 %.3f %.3f Tm[<", bbox[0], bbox[1]); + gs_snprintf(buffer, sizeof(buffer), " 1 0 0 1 %.3f %.3f Tm[<", bbox[0], bbox[1]); stream_puts(dev->strm, buffer); for (i = 0; i < len; i++) { - gs_sprintf(buffer, "%04x", dev->ocr.word_chars[i]); + gs_snprintf(buffer, sizeof(buffer), "%04x", dev->ocr.word_chars[i]); stream_puts(dev->strm, buffer); } stream_puts(dev->strm, ">]TJ\n"); @@ -607,19 +607,19 @@ ocr_callback(void *arg, const char *rune_, size = bbox[3]-bbox[1]; if (ppdev->ocr.cur_size != size) { - gs_sprintf(buffer, "/Ft0 %f Tf ", size); + gs_snprintf(buffer, sizeof(buffer), "/Ft0 %f Tf ", size); stream_puts(ppdev->strm, buffer); ppdev->ocr.cur_size = size; } scale = (bbox[2]-bbox[0]) / size * 200; if (ppdev->ocr.cur_scale != scale) { - gs_sprintf(buffer, " %f Tz ", scale); + gs_snprintf(buffer, sizeof(buffer), " %f Tz ", scale); stream_puts(ppdev->strm, buffer); ppdev->ocr.cur_scale = scale; } - gs_sprintf(buffer, "1 0 0 1 %f %f Tm ", bbox[0], bbox[1]); + gs_snprintf(buffer, sizeof(buffer), "1 0 0 1 %f %f Tm ", bbox[0], bbox[1]); stream_puts(ppdev->strm, buffer); - gs_sprintf(buffer, "<%04x>Tj\n", unicode); + gs_snprintf(buffer, sizeof(buffer), "<%04x>Tj\n", unicode); stream_puts(ppdev->strm, buffer); #else bbox[0] = word_bbox[0] * scale / ppdev->ocr.xres; diff --git a/devices/gdevpng.c b/devices/gdevpng.c index 7a0309a86..554c664cf 100644 --- a/devices/gdevpng.c +++ b/devices/gdevpng.c @@ -638,7 +638,7 @@ do_png_print_page(gx_device_png * pdev, gp_file * file, bool monod) int minor = (int)(gs_revision - (major * 1000)) / 10; int patch = gs_revision % 10; - gs_sprintf(software_text, "%s %d.%02d.%d", gs_product, major, minor, patch); + gs_snprintf(software_text, sizeof(software_text), "%s %d.%02d.%d", gs_product, major, minor, patch); } text_png.compression = -1; /* uncompressed */ text_png.key = software_key; diff --git a/devices/gdevtifs.c b/devices/gdevtifs.c index b937d0e32..afd71e169 100644 --- a/devices/gdevtifs.c +++ b/devices/gdevtifs.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -400,7 +400,7 @@ int tiff_set_fields_for_printer(gx_device_printer *pdev, strncpy(softwareValue, gs_product, maxSoftware); softwareValue[maxSoftware - 1] = 0; - gs_sprintf(revs, " %d.%2d.%d", major, minor, patch); + gs_snprintf(revs, sizeof(revs), " %d.%2d.%d", major, minor, patch); strncat(softwareValue, revs, maxSoftware - strlen(softwareValue) - 1); @@ -418,7 +418,7 @@ int tiff_set_fields_for_printer(gx_device_printer *pdev, time(&t); tms = *localtime(&t); #endif - gs_sprintf(dateTimeValue, "%04d:%02d:%02d %02d:%02d:%02d", + gs_snprintf(dateTimeValue, sizeof(dateTimeValue), "%04d:%02d:%02d %02d:%02d:%02d", tms.tm_year + 1900, tms.tm_mon + 1, tms.tm_mday, tms.tm_hour, tms.tm_min, tms.tm_sec); diff --git a/devices/gdevtsep.c b/devices/gdevtsep.c index ceaad0ccc..7b9ee023b 100644 --- a/devices/gdevtsep.c +++ b/devices/gdevtsep.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -1267,9 +1267,9 @@ tiffsep1_prn_close(gx_device * pdev) while (*fmt != 'l' && *fmt != '%') --fmt; if (*fmt == 'l') - gs_sprintf(compname, parsed.fname, count1); + gs_snprintf(compname, gp_file_name_sizeof, parsed.fname, count1); else - gs_sprintf(compname, parsed.fname, (int)count1); + gs_snprintf(compname, gp_file_name_sizeof, parsed.fname, (int)count1); parsed.iodev->procs.delete_file(parsed.iodev, compname); } else { parsed.iodev->procs.delete_file(parsed.iodev, tfdev->fname); @@ -1393,7 +1393,7 @@ copy_separation_name(tiffsep_device * pdev, } } if (use_sep_num != 0) - gs_sprintf(sep_num_str, "%d", sep_num); + gs_snprintf(sep_num_str, sizeof(sep_num_str), "%d", sep_num); /* New code: Copy the name, escaping non gp_file_name_good_char chars, * % and top bit set chars using %02x format. In addition, if 'escape' @@ -1500,7 +1500,7 @@ create_separation_file_name(tiffsep_device * pdev, char * buffer, /* Max of 10 chars in %d format */ if (max_size < base_filename_length + 11) return_error(gs_error_rangecheck); - gs_sprintf(buffer + base_filename_length, "s%d", sep_num); + gs_snprintf(buffer + base_filename_length, max_size - base_filename_length, "s%d", sep_num); } } if (use_sep_name) @@ -2510,9 +2510,9 @@ tiffsep1_print_page(gx_device_printer * pdev, gp_file * file) while (*fmt != 'l' && *fmt != '%') --fmt; if (*fmt == 'l') - gs_sprintf(compname, parsed.fname, count1); + gs_snprintf(compname, gp_file_name_sizeof, parsed.fname, count1); else - gs_sprintf(compname, parsed.fname, (int)count1); + gs_snprintf(compname, gp_file_name_sizeof, parsed.fname, (int)count1); parsed.iodev->procs.delete_file(parsed.iodev, compname); } #endif /* PPM_COMBINED_OUTPUT */ diff --git a/devices/gdevupd.c b/devices/gdevupd.c index 1e08237c8..179c400d6 100644 --- a/devices/gdevupd.c +++ b/devices/gdevupd.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -6484,7 +6484,7 @@ upd_open_wrtrtl(upd_device *udev) if( (B_PAGEWIDTH & upd->flags) && ((c == 0x73) || (c == 0x53)) ) { /* esc * r # S */ - gs_sprintf(cv,"%d",upd->pwidth); + gs_snprintf(cv,sizeof(cv),"%d",upd->pwidth); ncv = strlen(cv); nbp = (j+1) + ncv + (upd->strings[S_BEGIN].size-i); @@ -6502,7 +6502,7 @@ upd_open_wrtrtl(upd_device *udev) } else if((B_PAGELENGTH & upd->flags) && ((c == 0x74) || (c == 0x54)) ) { /* esc * r # T */ - gs_sprintf(cv,"%d",upd->pheight); + gs_snprintf(cv,sizeof(cv),"%d",upd->pheight); ncv = strlen(cv); nbp = (j+1) + ncv + (upd->strings[S_BEGIN].size-i); @@ -6531,7 +6531,7 @@ upd_open_wrtrtl(upd_device *udev) if( (B_RESOLUTION & upd->flags) && ((c == 0x72) || (c == 0x52)) ) { /* esc * t # R */ - gs_sprintf(cv,"%d",(int) + gs_snprintf(cv,sizeof(cv),"%d",(int) ((udev->y_pixels_per_inch < udev->x_pixels_per_inch ? udev->x_pixels_per_inch : udev->y_pixels_per_inch) +0.5)); @@ -6738,7 +6738,7 @@ upd_open_wrtrtl(upd_device *udev) if(B_PAGELENGTH & upd->flags) { /* insert new number */ - gs_sprintf(cv,"%d",(int) + gs_snprintf(cv,sizeof(cv),"%d",(int) (720.0 * udev->height / udev->y_pixels_per_inch + 0.5)); ncv = strlen(cv); @@ -6803,7 +6803,7 @@ upd_open_wrtrtl(upd_device *udev) if(B_PAGEWIDTH & upd->flags) { /* insert new number */ - gs_sprintf(cv,"%d",(int) + gs_snprintf(cv,sizeof(cv),"%d",(int) (720.0 * udev->width / udev->x_pixels_per_inch + 0.5)); ncv = strlen(cv); @@ -6898,7 +6898,7 @@ upd_open_wrtrtl(upd_device *udev) if(B_RESOLUTION & upd->flags) { /* insert new number */ - gs_sprintf(cv,"%d",(int) + gs_snprintf(cv,sizeof(cv),"%d",(int) ((udev->y_pixels_per_inch < udev->x_pixels_per_inch ? udev->x_pixels_per_inch : udev->y_pixels_per_inch) +0.5)); @@ -6953,7 +6953,7 @@ It must hold: char tmp[16]; if(0 < upd->strings[S_YMOVE].size) { - gs_sprintf(tmp,"%d",upd->pheight); + gs_snprintf(tmp,sizeof(tmp),"%d",upd->pheight); ny = upd->strings[S_YMOVE].size + strlen(tmp); } else { ny = 1 + upd->string_a[SA_WRITECOMP].data[upd->ocomp-1].size; @@ -7014,14 +7014,14 @@ upd_wrtrtl(upd_p upd, gp_file *out) */ if(upd->yscan != upd->yprinter) { /* Adjust Y-Position */ if(1 < upd->strings[S_YMOVE].size) { - gs_sprintf((char *)upd->outbuf+ioutbuf, + gs_snprintf((char *)upd->outbuf+ioutbuf, upd->noutbuf-ioutbuf, (const char *) upd->strings[S_YMOVE].data, upd->yscan - upd->yprinter); ioutbuf += strlen((char *)upd->outbuf+ioutbuf); } else { while(upd->yscan > upd->yprinter) { for(icomp = 0; icomp < upd->ocomp; ++icomp) { - gs_sprintf((char *)upd->outbuf+ioutbuf, + gs_snprintf((char *)upd->outbuf+ioutbuf, upd->noutbuf-ioutbuf, (const char *) upd->string_a[SA_WRITECOMP].data[icomp].data,0); ioutbuf += strlen((char *)upd->outbuf+ioutbuf); } diff --git a/devices/gdevwpr2.c b/devices/gdevwpr2.c index a19bc2237..a8e812f60 100644 --- a/devices/gdevwpr2.c +++ b/devices/gdevwpr2.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -574,7 +574,7 @@ win_pr2_print_page(gx_device_printer * pdev, gp_file * file) } if (!wdev->nocancel) { - gs_sprintf(dlgtext, "Printing page %d", (int)(pdev->PageCount) + 1); + gs_snprintf(dlgtext, sizeof(dlgtext), "Printing page %d", (int)(pdev->PageCount) + 1); SetWindowText(GetDlgItem(wdev->hDlgModeless, CANCEL_PRINTING), dlgtext); ShowWindow(wdev->hDlgModeless, SW_SHOW); } @@ -606,7 +606,7 @@ win_pr2_print_page(gx_device_printer * pdev, gp_file * file) if (!wdev->nocancel) { /* inform user of progress */ - gs_sprintf(dlgtext, "%d%% done", (int)(y * 100L / scan_lines)); + gs_snprintf(dlgtext, sizeof(dlgtext), "%d%% done", (int)(y * 100L / scan_lines)); SetWindowText(GetDlgItem(wdev->hDlgModeless, CANCEL_PCDONE), dlgtext); } /* process message loop */ @@ -1505,9 +1505,9 @@ win_pr2_print_setup_interaction(gx_device_win_pr2 * wdev, int mode) wdev->user_changed_settings = TRUE; if (wdev->use_old_spool_name) { - gs_sprintf(wdev->fname, "\\\\spool\\%s", (char*)(devnames)+(devnames->wDeviceOffset)); + gs_snprintf(wdev->fname, prn_fname_sizeof, "\\\\spool\\%s", (char*)(devnames)+(devnames->wDeviceOffset)); } else { - gs_sprintf(wdev->fname, "%%printer%%%s", (char*)(devnames)+(devnames->wDeviceOffset)); + gs_snprintf(wdev->fname, prn_fname_sizeof, "%%printer%%%s", (char*)(devnames)+(devnames->wDeviceOffset)); } if (mode == 3) { diff --git a/devices/gdevxini.c b/devices/gdevxini.c index ef3c6f4f1..9fce30415 100644 --- a/devices/gdevxini.c +++ b/devices/gdevxini.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -385,7 +385,7 @@ gdev_x_open(gx_device_X * xdev) char gstr[40]; int bitmask; - gs_sprintf(gstr, "%dx%d+%d+%d", sizehints.width, + gs_snprintf(gstr, sizeof(gstr), "%dx%d+%d+%d", sizehints.width, sizehints.height, sizehints.x, sizehints.y); bitmask = XWMGeometry(xdev->dpy, DefaultScreen(xdev->dpy), xdev->geometry, gstr, xdev->borderWidth, diff --git a/devices/vector/gdevpdf.c b/devices/vector/gdevpdf.c index e061fd4aa..cb268f62e 100644 --- a/devices/vector/gdevpdf.c +++ b/devices/vector/gdevpdf.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -447,7 +447,7 @@ pdf_initialize_ids(gx_device_pdf * pdev) tms = *localtime(&t); #endif - gs_sprintf(buf, "(D:%04d%02d%02d%02d%02d%02d%c%02d\'%02d\')", + gs_snprintf(buf, sizeof(buf), "(D:%04d%02d%02d%02d%02d%02d%c%02d\'%02d\')", tms.tm_year + 1900, tms.tm_mon + 1, tms.tm_mday, tms.tm_hour, tms.tm_min, tms.tm_sec, timesign, timeoffset / 60, timeoffset % 60); @@ -1600,7 +1600,7 @@ static int write_xref_section(gx_device_pdf *pdev, gp_file *tfile, int64_t start * chances of needing to write white space to pad the file out. */ if (!pdev->Linearise) { - gs_sprintf(str, "%010"PRId64" 00000 n \n", pos); + gs_snprintf(str, sizeof(str), "%010"PRId64" 00000 n \n", pos); stream_puts(pdev->strm, str); } if (Offsets) @@ -1633,7 +1633,7 @@ rewrite_object(gx_device_pdf *const pdev, pdf_linearisation_t *linear_params, in code = gp_fread(&c, 1, 1, linear_params->sfile); read++; } while (c != '\n' && code > 0); - gs_sprintf(Scratch, "%d 0 obj\n", pdev->ResourceUsage[object].NewObjectNumber); + gs_snprintf(Scratch, ScratchSize, "%d 0 obj\n", pdev->ResourceUsage[object].NewObjectNumber); gp_fwrite(Scratch, strlen(Scratch), 1, linear_params->Lin_File.file); code = gp_fread(&c, 1, 1, linear_params->sfile); @@ -1685,7 +1685,7 @@ rewrite_object(gx_device_pdf *const pdev, pdf_linearisation_t *linear_params, in target++; (void)sscanf(target, "%d 0 R", &ID); gp_fwrite(source, target - source, 1, linear_params->Lin_File.file); - gs_sprintf(Buf, "%d 0 R", pdev->ResourceUsage[ID].NewObjectNumber); + gs_snprintf(Buf, sizeof(Buf), "%d 0 R", pdev->ResourceUsage[ID].NewObjectNumber); gp_fwrite(Buf, strlen(Buf), 1, linear_params->Lin_File.file); source = next; } else { @@ -1874,7 +1874,7 @@ static int pdf_linearise(gx_device_pdf *pdev, pdf_linearisation_t *linear_params } #endif /* Linearisation. Part 1, file header */ - gs_sprintf(Header, "%%PDF-%d.%d\n", level / 10, level % 10); + gs_snprintf(Header, sizeof(Header), "%%PDF-%d.%d\n", level / 10, level % 10); gp_fwrite(Header, strlen(Header), 1, linear_params->Lin_File.file); if (pdev->binary_ok) gp_fwrite(Binary, strlen(Binary), 1, linear_params->Lin_File.file); @@ -1887,16 +1887,16 @@ static int pdf_linearise(gx_device_pdf *pdev, pdf_linearisation_t *linear_params /* Linearisation. Part 2, the Linearisation dictioanry */ linear_params->LDictOffset = gp_ftell(linear_params->Lin_File.file); - gs_sprintf(LDict, "%d 0 obj\n<< \n", + gs_snprintf(LDict, sizeof(LDict), "%d 0 obj\n<< \n", LDictObj); gp_fwrite(LDict, strlen(LDict), 1, linear_params->Lin_File.file); /* First page cross-reference table here (Part 3) */ linear_params->FirstxrefOffset = gp_ftell(linear_params->Lin_File.file); - gs_sprintf(Header, "xref\n%d %d\n", LDictObj, Part1To6 - LDictObj + 1); /* +1 for the primary hint stream */ + gs_snprintf(Header, sizeof(Header), "xref\n%d %d\n", LDictObj, Part1To6 - LDictObj + 1); /* +1 for the primary hint stream */ gp_fwrite(Header, strlen(Header), 1, linear_params->Lin_File.file); - gs_sprintf(Header, "0000000000 00000 n \n"); + gs_snprintf(Header, sizeof(Header), "0000000000 00000 n \n"); for (i = LDictObj;i <= linear_params->LastResource + 2; i++) { gp_fwrite(Header, 20, 1, linear_params->Lin_File.file); @@ -1906,7 +1906,7 @@ static int pdf_linearise(gx_device_pdf *pdev, pdf_linearisation_t *linear_params * +1 for the linearisation dict and +1 for the primary hint stream. */ linear_params->FirsttrailerOffset = gp_ftell(linear_params->Lin_File.file); - gs_sprintf(LDict, "\ntrailer\n<</Size %ld/Info %d 0 R/Root %d 0 R/ID[%s%s]/Prev %d>>\nstartxref\r\n0\n%%%%EOF\n \n", + gs_snprintf(LDict, sizeof(LDict), "\ntrailer\n<</Size %ld/Info %d 0 R/Root %d 0 R/ID[%s%s]/Prev %d>>\nstartxref\r\n0\n%%%%EOF\n \n", linear_params->LastResource + 3, pdev->ResourceUsage[linear_params->Info_id].NewObjectNumber, pdev->ResourceUsage[linear_params->Catalog_id].NewObjectNumber, fileID, fileID, 0); gp_fwrite(LDict, strlen(LDict), 1, linear_params->Lin_File.file); @@ -2024,7 +2024,7 @@ static int pdf_linearise(gx_device_pdf *pdev, pdf_linearisation_t *linear_params } } /* insert the primary hint stream */ - gs_sprintf(LDict, "%d 0 obj\n<</Length \n/S >>\nstream\n", HintStreamObj); + gs_snprintf(LDict, sizeof(LDict), "%d 0 obj\n<</Length \n/S >>\nstream\n", HintStreamObj); gp_fwrite(LDict, strlen(LDict), 1, linear_params->sfile); HintStreamStart = gp_ftell(linear_params->sfile); @@ -2338,7 +2338,7 @@ static int pdf_linearise(gx_device_pdf *pdev, pdf_linearisation_t *linear_params flush_hint_stream(linear_params); HintLength = gp_ftell(linear_params->sfile) - HintStreamStart; - gs_sprintf(LDict, "\nendstream\nendobj\n"); + gs_snprintf(LDict, sizeof(LDict), "\nendstream\nendobj\n"); gp_fwrite(LDict, strlen(LDict), 1, linear_params->sfile); /* Calculate the length of the primary hint stream */ HintStreamLen = gp_ftell(linear_params->sfile) - pdev->ResourceUsage[HintStreamObj].LinearisedOffset; @@ -2371,23 +2371,23 @@ static int pdf_linearise(gx_device_pdf *pdev, pdf_linearisation_t *linear_params /* Now the file is long enough, write the xref */ mainxref = gp_ftell(linear_params->sfile); - gs_sprintf(Header, "xref\n0 %d\n", LDictObj); + gs_snprintf(Header, sizeof(Header), "xref\n0 %d\n", LDictObj); gp_fwrite(Header, strlen(Header), 1, linear_params->sfile); linear_params->T = gp_ftell(linear_params->sfile) - 1; - gs_sprintf(Header, "0000000000 65535 f \n"); + gs_snprintf(Header, sizeof(Header), "0000000000 65535 f \n"); gp_fwrite(Header, strlen(Header), 1, linear_params->sfile); for (i = 1;i < LDictObj; i++) { for (j = 0; j < pdev->ResourceUsageSize;j++) { if (pdev->ResourceUsage[j].NewObjectNumber == i) { - gs_sprintf(Header, "%010"PRId64" 00000 n \n", pdev->ResourceUsage[j].LinearisedOffset + HintStreamLen); + gs_snprintf(Header, sizeof(Header), "%010"PRId64" 00000 n \n", pdev->ResourceUsage[j].LinearisedOffset + HintStreamLen); gp_fwrite(Header, 20, 1, linear_params->sfile); } } } - gs_sprintf(LDict, "trailer\n<</Size %d>>\nstartxref\n%"PRId64"\n%%%%EOF\n", + gs_snprintf(LDict, sizeof(LDict), "trailer\n<</Size %d>>\nstartxref\n%"PRId64"\n%%%%EOF\n", LDictObj, linear_params->FirstxrefOffset); gp_fwrite(LDict, strlen(LDict), 1, linear_params->sfile); @@ -2401,19 +2401,19 @@ static int pdf_linearise(gx_device_pdf *pdev, pdf_linearisation_t *linear_params * versions. */ gp_fseek(linear_params->sfile, linear_params->LDictOffset, SEEK_SET); - gs_sprintf(LDict, "%d 0 obj\n<</Linearized 1/L %"PRId64"/H[ ", LDictObj, linear_params->FileLength); + gs_snprintf(LDict, sizeof(LDict), "%d 0 obj\n<</Linearized 1/L %"PRId64"/H[ ", LDictObj, linear_params->FileLength); gp_fwrite(LDict, strlen(LDict), 1, linear_params->sfile); - gs_sprintf(LDict, "%"PRId64"", pdev->ResourceUsage[HintStreamObj].LinearisedOffset); + gs_snprintf(LDict, sizeof(LDict), "%"PRId64"", pdev->ResourceUsage[HintStreamObj].LinearisedOffset); gp_fwrite(LDict, strlen(LDict), 1, linear_params->sfile); - gs_sprintf(LDict, " %"PRId64"]", HintStreamLen); + gs_snprintf(LDict, sizeof(LDict), " %"PRId64"]", HintStreamLen); gp_fwrite(LDict, strlen(LDict), 1, linear_params->sfile); /* Implementation Note 180 in hte PDF Reference 1.7 says that Acrobat * gets the 'E' value wrong. So its probably not important.... */ - gs_sprintf(LDict, "/O %d/E %"PRId64"",pdev->ResourceUsage[pdev->pages[0].Page->id].NewObjectNumber, linear_params->E); + gs_snprintf(LDict, sizeof(LDict), "/O %d/E %"PRId64"",pdev->ResourceUsage[pdev->pages[0].Page->id].NewObjectNumber, linear_params->E); gp_fwrite(LDict, strlen(LDict), 1, linear_params->sfile); - gs_sprintf(LDict, "/N %d/T %"PRId64">>\nendobj\n", pdev->next_page, linear_params->T); + gs_snprintf(LDict, sizeof(LDict), "/N %d/T %"PRId64">>\nendobj\n", pdev->next_page, linear_params->T); gp_fwrite(LDict, strlen(LDict), 1, linear_params->sfile); /* Return to the secondary xref and write it again filling @@ -2423,13 +2423,13 @@ static int pdf_linearise(gx_device_pdf *pdev, pdf_linearisation_t *linear_params code = gs_error_ioerror; goto error; } - gs_sprintf(Header, "xref\n%d %d\n", LDictObj, Part1To6 - LDictObj + 1); /* +1 for the primary hint stream */ + gs_snprintf(Header, sizeof(Header), "xref\n%d %d\n", LDictObj, Part1To6 - LDictObj + 1); /* +1 for the primary hint stream */ gp_fwrite(Header, strlen(Header), 1, linear_params->sfile); for (i = LDictObj;i <= linear_params->LastResource + 2; i++) { for (j = 0; j < pdev->ResourceUsageSize;j++) { if (pdev->ResourceUsage[j].NewObjectNumber == i) { - gs_sprintf(Header, "%010"PRId64" 00000 n \n", pdev->ResourceUsage[j].LinearisedOffset); + gs_snprintf(Header, sizeof(Header), "%010"PRId64" 00000 n \n", pdev->ResourceUsage[j].LinearisedOffset); gp_fwrite(Header, 20, 1, linear_params->sfile); } } @@ -2442,7 +2442,7 @@ static int pdf_linearise(gx_device_pdf *pdev, pdf_linearisation_t *linear_params if (code != 0) return_error(gs_error_ioerror); - gs_sprintf(LDict, "\ntrailer\n<</Size %ld/Info %d 0 R/Root %d 0 R/ID[%s%s]/Prev %"PRId64">>\nstartxref\r\n0\n%%%%EOF\n", + gs_snprintf(LDict, sizeof(LDict), "\ntrailer\n<</Size %ld/Info %d 0 R/Root %d 0 R/ID[%s%s]/Prev %"PRId64">>\nstartxref\r\n0\n%%%%EOF\n", linear_params->LastResource + 3, pdev->ResourceUsage[linear_params->Info_id].NewObjectNumber, pdev->ResourceUsage[linear_params->Catalog_id].NewObjectNumber, fileID, fileID, mainxref); gp_fwrite(LDict, strlen(LDict), 1, linear_params->sfile); @@ -2450,9 +2450,9 @@ static int pdf_linearise(gx_device_pdf *pdev, pdf_linearisation_t *linear_params if (code != 0) return_error(gs_error_ioerror); - gs_sprintf(LDict, "%d 0 obj\n<</Length %10"PRId64"", HintStreamObj, HintLength); + gs_snprintf(LDict, sizeof(LDict), "%d 0 obj\n<</Length %10"PRId64"", HintStreamObj, HintLength); gp_fwrite(LDict, strlen(LDict), 1, linear_params->sfile); - gs_sprintf(LDict, "\n/S %10"PRId64">>\nstream\n", SharedHintOffset); + gs_snprintf(LDict, sizeof(LDict), "\n/S %10"PRId64">>\nstream\n", SharedHintOffset); gp_fwrite(LDict, strlen(LDict), 1, linear_params->sfile); error: @@ -3103,12 +3103,12 @@ pdf_close(gx_device * dev) linear_params.xref = xref; if (pdev->FirstObjectNumber == 1) { - gs_sprintf(str, "xref\n0 %"PRId64"\n0000000000 65535 f \n", + gs_snprintf(str, sizeof(str), "xref\n0 %"PRId64"\n0000000000 65535 f \n", end_section); stream_puts(s, str); } else { - gs_sprintf(str, "xref\n0 1\n0000000000 65535 f \n%"PRId64" %"PRId64"\n", + gs_snprintf(str, sizeof(str), "xref\n0 1\n0000000000 65535 f \n%"PRId64" %"PRId64"\n", start_section, end_section - start_section); stream_puts(s, str); @@ -3125,7 +3125,7 @@ pdf_close(gx_device * dev) end_section = find_end_xref_section(pdev, tfile, start_section, resource_pos); if (end_section < 0) return end_section; - gs_sprintf(str, "%"PRId64" %"PRId64"\n", start_section, end_section - start_section); + gs_snprintf(str, sizeof(str), "%"PRId64" %"PRId64"\n", start_section, end_section - start_section); stream_puts(s, str); } while (1); @@ -3144,7 +3144,7 @@ pdf_close(gx_device * dev) pprintld1(s, "/Encrypt %ld 0 R ", Encrypt_id); } stream_puts(s, ">>\n"); - gs_sprintf(xref_str, "startxref\n%"PRId64"\n%%%%EOF\n", xref); + gs_snprintf(xref_str, sizeof(xref_str), "startxref\n%"PRId64"\n%%%%EOF\n", xref); stream_puts(s, xref_str); } } diff --git a/devices/vector/gdevpdfe.c b/devices/vector/gdevpdfe.c index 5cb88f735..ec011d8ba 100644 --- a/devices/vector/gdevpdfe.c +++ b/devices/vector/gdevpdfe.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -209,7 +209,7 @@ pdf_xmp_time(char *buf, int buf_length) time(&t); tms = *localtime(&t); #endif - gs_sprintf(buf1, + gs_snprintf(buf1, sizeof(buf1), "%04d-%02d-%02d", tms.tm_year + 1900, tms.tm_mon + 1, tms.tm_mday); strncpy(buf, buf1, buf_length); @@ -884,7 +884,7 @@ pdf_document_metadata(gx_device_pdf *pdev) code = COS_WRITE_OBJECT(pres->object, pdev, resourceNone); if (code < 0) return code; - gs_sprintf(buf, "%ld 0 R", pres->object->id); + gs_snprintf(buf, sizeof(buf), "%ld 0 R", pres->object->id); pdf_record_usage(pdev, pres->object->id, resource_usage_part9_structure); code = cos_dict_put_c_key_object(pdev->Catalog, "/Metadata", pres->object); diff --git a/devices/vector/gdevpdfg.c b/devices/vector/gdevpdfg.c index e2f03c1dd..a955e457e 100644 --- a/devices/vector/gdevpdfg.c +++ b/devices/vector/gdevpdfg.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -2083,7 +2083,7 @@ transfer_map_access_signed(const gs_data_source_t *psrc, static int pdf_write_transfer_map(gx_device_pdf *pdev, const gx_transfer_map *map, int range0, bool check_identity, - const char *key, char *ids) + const char *key, char *ids, int id_max) { gs_memory_t *mem = pdev->pdf_memory; gs_function_Sd_params_t params; @@ -2152,14 +2152,14 @@ pdf_write_transfer_map(gx_device_pdf *pdev, const gx_transfer_map *map, gs_function_free(pfn, false, mem); if (code < 0) return code; - gs_sprintf(ids, "%s%s%ld 0 R", key, (key[0] && key[0] != ' ' ? " " : ""), id); + gs_snprintf(ids, id_max, "%s%s%ld 0 R", key, (key[0] && key[0] != ' ' ? " " : ""), id); return 0; } static int pdf_write_transfer(gx_device_pdf *pdev, const gx_transfer_map *map, - const char *key, char *ids) + const char *key, char *ids, int id_max) { - return pdf_write_transfer_map(pdev, map, 0, true, key, ids); + return pdf_write_transfer_map(pdev, map, 0, true, key, ids, id_max); } /* ------ Halftones ------ */ @@ -2395,7 +2395,7 @@ pdf_write_spot_halftone(gx_device_pdf *pdev, const gs_spot_halftone *psht, if (pdev->CompatibilityLevel <= 1.7) { code = pdf_write_transfer(pdev, porder->transfer, "/TransferFunction", - trs); + trs, sizeof(trs)); if (code < 0) return code; } @@ -2515,7 +2515,7 @@ pdf_write_threshold_halftone(gx_device_pdf *pdev, memset(trs, 0x00, 17 + MAX_FN_CHARS + 1); if (pdev->CompatibilityLevel <= 1.7) { code = pdf_write_transfer(pdev, porder->transfer, "", - trs); + trs, sizeof(trs)); if (code < 0) return code; @@ -2549,7 +2549,7 @@ pdf_write_threshold2_halftone(gx_device_pdf *pdev, memset(trs, 0x00, 17 + MAX_FN_CHARS + 1); if (pdev->CompatibilityLevel <= 1.7) { code = pdf_write_transfer(pdev, porder->transfer, "", - trs); + trs, sizeof(trs)); if (code < 0) return code; @@ -2710,7 +2710,7 @@ pdf_write_multiple_halftone(gx_device_pdf *pdev, gs_gstate *pgs, */ static int pdf_update_halftone(gx_device_pdf *pdev, const gs_gstate *pgs, - char *hts) + char *hts, int hts_max) { const gs_halftone *pht = pgs->halftone; const gx_device_halftone *pdht = pgs->dev_ht[HT_OBJTYPE_DEFAULT]; @@ -2748,7 +2748,7 @@ pdf_update_halftone(gx_device_pdf *pdev, const gs_gstate *pgs, } if (code < 0) return code; - gs_sprintf(hts, "%ld 0 R", id); + gs_snprintf(hts, hts_max, "%ld 0 R", id); pdev->halftone_id = pgs->dev_ht[HT_OBJTYPE_DEFAULT]->id; return code; } @@ -2816,7 +2816,7 @@ pdf_end_gstate(gx_device_pdf *pdev, pdf_resource_t *pres) */ static int pdf_update_transfer(gx_device_pdf *pdev, const gs_gstate *pgs, - char *trs) + char *trs, int trs_max) { int i, pi = -1; bool multiple = false, update = false; @@ -2842,7 +2842,7 @@ pdf_update_transfer(gx_device_pdf *pdev, const gs_gstate *pgs, int mask; if (!multiple) { - code = pdf_write_transfer(pdev, tm[pi], "", trs); + code = pdf_write_transfer(pdev, tm[pi], "", trs, trs_max); if (code < 0) return code; mask = code == 0; @@ -2851,9 +2851,10 @@ pdf_update_transfer(gx_device_pdf *pdev, const gs_gstate *pgs, mask = 0; for (i = 0; i < 4; ++i) if (tm[i] != NULL) { + int len = (int)strlen(trs); code = pdf_write_transfer_map(pdev, tm[i], - 0, true, " ", trs + strlen(trs)); + 0, true, " ", trs + len, trs_max - len); if (code < 0) return code; mask |= (code == 0) << i; @@ -2891,7 +2892,7 @@ pdf_update_alpha(gx_device_pdf *pdev, const gs_gstate *pgs, } } else{ - gs_sprintf(buf, "%ld 0 R", pgs->soft_mask_id); + gs_snprintf(buf, sizeof(buf), "%ld 0 R", pgs->soft_mask_id); code = pdf_open_gstate(pdev, ppres); if (code < 0) return code; @@ -2991,28 +2992,28 @@ pdf_prepare_drawing(gx_device_pdf *pdev, const gs_gstate *pgs, pdev->halftone_id != pgs->dev_ht[HT_OBJTYPE_DEFAULT]->id && !pdev->PDFX ) { - code = pdf_update_halftone(pdev, pgs, hts); + code = pdf_update_halftone(pdev, pgs, hts, sizeof(hts)); if (code < 0) return code; } if (pdev->params.TransferFunctionInfo != tfi_Remove && !pdev->PDFX && pdev->PDFA == 0 ) { - code = pdf_update_transfer(pdev, pgs, trs); + code = pdf_update_transfer(pdev, pgs, trs, sizeof(trs)); if (code < 0) return code; } if (pdev->params.UCRandBGInfo == ucrbg_Preserve) { if (pgs->black_generation && pdev->black_generation_id != pgs->black_generation->id) { code = pdf_write_transfer_map(pdev, pgs->black_generation, - 0, false, "", bgs); + 0, false, "", bgs, sizeof(bgs)); if (code < 0) return code; pdev->black_generation_id = pgs->black_generation->id; } if (pgs->undercolor_removal && pdev->undercolor_removal_id != pgs->undercolor_removal->id) { code = pdf_write_transfer_map(pdev, pgs->undercolor_removal, - -1, false, "", ucrs); + -1, false, "", ucrs, sizeof(ucrs)); if (code < 0) return code; pdev->undercolor_removal_id = pgs->undercolor_removal->id; @@ -3080,7 +3081,7 @@ pdf_prepare_drawing(gx_device_pdf *pdev, const gs_gstate *pgs, code = pdf_open_gstate(pdev, ppres); if (code < 0) return code; - gs_sprintf(buf, "[%d %d]", phase.x, phase.y); + gs_snprintf(buf, sizeof(buf), "[%d %d]", phase.x, phase.y); if (pdev->CompatibilityLevel >= 1.999) code = cos_dict_put_string_copy(resource_dict(*ppres), "/HTO", buf); else diff --git a/devices/vector/gdevpdfi.c b/devices/vector/gdevpdfi.c index 5ac00b957..1e1a9daab 100644 --- a/devices/vector/gdevpdfi.c +++ b/devices/vector/gdevpdfi.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -1923,7 +1923,7 @@ pdf_end_and_do_image(gx_device_pdf *pdev, pdf_image_writer *piw, if (pdev->image_mask_id != gs_no_id) { char buf[20]; - gs_sprintf(buf, "%ld 0 R", pdev->image_mask_id); + gs_snprintf(buf, sizeof(buf), "%ld 0 R", pdev->image_mask_id); code = cos_dict_put_string_copy((cos_dict_t *)pres->object, pdev->image_mask_is_SMask ? "/SMask" : "/Mask", buf); (*(pres->object)).md5_valid = 0; diff --git a/devices/vector/gdevpdfm.c b/devices/vector/gdevpdfm.c index 247bf7b46..f6b6c51f4 100644 --- a/devices/vector/gdevpdfm.c +++ b/devices/vector/gdevpdfm.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -171,12 +171,12 @@ pdfmark_make_dest(char dstr[MAX_DEST_STRING], gx_device_pdf * pdev, else if (pdfmark_find_key("/Action", pairs, count, &action) && pdf_key_eq(&action, "/GoToR") ) - gs_sprintf(dstr, "[%d ", page - 1); + gs_snprintf(dstr, MAX_DEST_STRING, "[%d ", page - 1); else { code = update_max_page_reference(pdev, &page); if (code < 0) return code; - gs_sprintf(dstr, "[%ld 0 R ", pdf_page_id(pdev, page)); + gs_snprintf(dstr, MAX_DEST_STRING, "[%ld 0 R ", pdf_page_id(pdev, page)); } len = strlen(dstr); if (len + view_string.size > MAX_DEST_STRING) @@ -912,7 +912,7 @@ pdfmark_put_ao_pairs(gx_device_pdf * pdev, cos_dict_t *pcd, char dstr[1 + (sizeof(long) * 8 / 3 + 1) + 25 + 1]; long page_id = pdf_page_id(pdev, pdev->next_page + 1); - gs_sprintf(dstr, "[%ld 0 R /XYZ null null null]", page_id); + gs_snprintf(dstr, MAX_DEST_STRING, "[%ld 0 R /XYZ null null null]", page_id); cos_dict_put_c_key_string(pcd, "/Dest", (const unsigned char*) dstr, strlen(dstr)); } @@ -1769,7 +1769,7 @@ pdfmark_PS(gx_device_pdf * pdev, gs_param_string * pairs, uint count, if (level1_id != gs_no_id) { char r[MAX_DEST_STRING]; - gs_sprintf(r, "%ld 0 R", level1_id); + gs_snprintf(r, sizeof(r), "%ld 0 R", level1_id); code = cos_dict_put_c_key_string(cos_stream_dict(pcs), "/Level1", (byte *)r, strlen(r)); if (code < 0) diff --git a/devices/vector/gdevpdfo.c b/devices/vector/gdevpdfo.c index a1c180128..3ec00f5e6 100644 --- a/devices/vector/gdevpdfo.c +++ b/devices/vector/gdevpdfo.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -701,7 +701,7 @@ cos_array_add_int(cos_array_t *pca, int i) char str[sizeof(int) * 8 / 3 + 3]; /* sign, rounding, 0 terminator */ cos_value_t v; - gs_sprintf(str, "%d", i); + gs_snprintf(str, sizeof(str), "%d", i); return cos_array_add(pca, cos_string_value(&v, (byte *)str, strlen(str))); } int @@ -1380,7 +1380,7 @@ cos_dict_put_c_key_int(cos_dict_t *pcd, const char *key, int value) { char str[sizeof(int) * 8 / 3 + 3]; /* sign, rounding, 0 terminator */ - gs_sprintf(str, "%d", value); + gs_snprintf(str, sizeof(str), "%d", value); return cos_dict_put_c_key_string(pcd, key, (byte *)str, strlen(str)); } int diff --git a/devices/vector/gdevpdfr.c b/devices/vector/gdevpdfr.c index 7aca15a6e..fd641aefc 100644 --- a/devices/vector/gdevpdfr.c +++ b/devices/vector/gdevpdfr.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -140,7 +140,7 @@ pdf_refer_named(gx_device_pdf * pdev, const gs_param_string * pname_orig, } if (page_number <= 0) return code; - gs_sprintf(page_name_chars, "{Page%d}", page_number); + gs_snprintf(page_name_chars, sizeof(page_name_chars), "{Page%d}", page_number); param_string_from_string(pnstr, page_name_chars); pname = &pnstr; code = pdf_find_named(pdev, pname, ppco); @@ -470,7 +470,7 @@ pdf_replace_names(gx_device_pdf * pdev, const gs_param_string * from, size += sname - scan; if (pco) { - gs_sprintf(ref, " %ld 0 R ", pco->id); + gs_snprintf(ref, sizeof(ref), " %ld 0 R ", pco->id); size += strlen(ref); /* Special 'name' escaping convention (see gs_pdfwr.ps, /.pdf===dict * the /nametype procedure). We do not want to write out the NULL @@ -509,7 +509,7 @@ pdf_replace_names(gx_device_pdf * pdev, const gs_param_string * from, memcpy(sto, scan, copy); sto += copy; if (pco) { - gs_sprintf(ref, " %ld 0 R ", pco->id); + gs_snprintf(ref, sizeof(ref), " %ld 0 R ", pco->id); rlen = strlen(ref); if (sname >= (start + 2) && sname[-1] == 0x00 && sname[-2] == 0x00 && next[0] == 0x00) { sto -= 2; diff --git a/devices/vector/gdevpdft.c b/devices/vector/gdevpdft.c index 5b8af68df..72f082f90 100644 --- a/devices/vector/gdevpdft.c +++ b/devices/vector/gdevpdft.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -63,7 +63,7 @@ pdf_make_soft_mask_dict(gx_device_pdf * pdev, const gs_pdf14trans_params_t * ppa code = pdf_write_function(pdev, pparams->transfer_function, &id); if (code < 0) return code; - gs_sprintf(buf, " %ld 0 R", id); + gs_snprintf(buf, sizeof(buf), " %ld 0 R", id); code = cos_dict_put_c_key_string(soft_mask_dict, "/TR", (const byte *)buf, strlen(buf)); if (code < 0) return code; @@ -365,7 +365,7 @@ pdf_end_transparency_mask(gs_gstate * pgs, gx_device_pdf * pdev, return 0; /* We need to update the 'where_used' field, in case we substituted a resource */ pres->where_used |= pdev->used_mask; - gs_sprintf(buf, "%ld 0 R", pdf_resource_id(pres)); + gs_snprintf(buf, sizeof(buf), "%ld 0 R", pdf_resource_id(pres)); if (pdev->pres_soft_mask_dict == 0L) { /* something went horribly wrong, we have an 'end' wihtout a matching 'begin' * Give up, throw an error. diff --git a/devices/vector/gdevpdfu.c b/devices/vector/gdevpdfu.c index ec4a81651..f12fa38e1 100644 --- a/devices/vector/gdevpdfu.c +++ b/devices/vector/gdevpdfu.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -335,14 +335,14 @@ static int write_tt_encodings(stream *s, bool HaveTrueTypes) char Buffer[256]; single_glyph_list_t *entry = SingleGlyphList; - gs_sprintf(Buffer, "/AdobeGlyphList mark\n"); + gs_snprintf(Buffer, sizeof(Buffer), "/AdobeGlyphList mark\n"); stream_write(s, Buffer, strlen(Buffer)); while (entry->Glyph) { - gs_sprintf(Buffer, "/%s 16#%04x\n", entry->Glyph, entry->Unicode); + gs_snprintf(Buffer, sizeof(Buffer), "/%s 16#%04x\n", entry->Glyph, entry->Unicode); stream_write(s, Buffer, strlen(Buffer)); entry++; }; - gs_sprintf(Buffer, ".dicttomark readonly def\n"); + gs_snprintf(Buffer, sizeof(Buffer), ".dicttomark readonly def\n"); stream_write(s, Buffer, strlen(Buffer)); index = 0; @@ -523,29 +523,29 @@ int ps2write_dsc_header(gx_device_pdf * pdev, int pages) } } if (!pdev->Eps2Write || pdev->BBox.p.x > pdev->BBox.q.x || pdev->BBox.p.y > pdev->BBox.q.y) - gs_sprintf(BBox, "%%%%BoundingBox: 0 0 %d %d\n", (int)urx, (int)ury); + gs_snprintf(BBox, sizeof(BBox), "%%%%BoundingBox: 0 0 %d %d\n", (int)urx, (int)ury); else - gs_sprintf(BBox, "%%%%BoundingBox: %d %d %d %d\n", (int)floor(pdev->BBox.p.x), (int)floor(pdev->BBox.p.y), (int)ceil(pdev->BBox.q.x), (int)ceil(pdev->BBox.q.y)); + gs_snprintf(BBox, sizeof(BBox), "%%%%BoundingBox: %d %d %d %d\n", (int)floor(pdev->BBox.p.x), (int)floor(pdev->BBox.p.y), (int)ceil(pdev->BBox.q.x), (int)ceil(pdev->BBox.q.y)); stream_write(s, (byte *)BBox, strlen(BBox)); if (!pdev->Eps2Write || pdev->BBox.p.x > pdev->BBox.q.x || pdev->BBox.p.y > pdev->BBox.q.y) - gs_sprintf(BBox, "%%%%HiResBoundingBox: 0 0 %.2f %.2f\n", urx, ury); + gs_snprintf(BBox, sizeof(BBox), "%%%%HiResBoundingBox: 0 0 %.2f %.2f\n", urx, ury); else - gs_sprintf(BBox, "%%%%HiResBoundingBox: %.2f %.2f %.2f %.2f\n", pdev->BBox.p.x, pdev->BBox.p.y, pdev->BBox.q.x, pdev->BBox.q.y); + gs_snprintf(BBox, sizeof(BBox), "%%%%HiResBoundingBox: %.2f %.2f %.2f %.2f\n", pdev->BBox.p.x, pdev->BBox.p.y, pdev->BBox.q.x, pdev->BBox.q.y); stream_write(s, (byte *)BBox, strlen(BBox)); } cre_date_time_len = pdf_get_docinfo_item(pdev, "/CreationDate", cre_date_time, sizeof(cre_date_time) - 1); cre_date_time[cre_date_time_len] = 0; - gs_sprintf(BBox, "%%%%Creator: %s %d (%s)\n", gs_product, (int)gs_revision, + gs_snprintf(BBox, sizeof(BBox), "%%%%Creator: %s %d (%s)\n", gs_product, (int)gs_revision, pdev->dname); stream_write(s, (byte *)BBox, strlen(BBox)); stream_puts(s, "%%LanguageLevel: 2\n"); - gs_sprintf(BBox, "%%%%CreationDate: %s\n", cre_date_time); + gs_snprintf(BBox, sizeof(BBox), "%%%%CreationDate: %s\n", cre_date_time); stream_write(s, (byte *)BBox, strlen(BBox)); - gs_sprintf(BBox, "%%%%Pages: %d\n", pages); + gs_snprintf(BBox, sizeof(BBox), "%%%%Pages: %d\n", pages); stream_write(s, (byte *)BBox, strlen(BBox)); - gs_sprintf(BBox, "%%%%EndComments\n"); + gs_snprintf(BBox, sizeof(BBox), "%%%%EndComments\n"); stream_write(s, (byte *)BBox, strlen(BBox)); - gs_sprintf(BBox, "%%%%BeginProlog\n"); + gs_snprintf(BBox, sizeof(BBox), "%%%%BeginProlog\n"); stream_write(s, (byte *)BBox, strlen(BBox)); if (pdev->params.CompressPages) { /* When CompressEntireFile is true and ASCII85EncodePages is false, @@ -605,7 +605,7 @@ pdfwrite_pdf_open_document(gx_device_pdf * pdev) pdev->CompressEntireFile = 0; else { stream_write(s, (byte *)"%!\r", 3); - gs_sprintf(BBox, "%%%%BoundingBox: 0 0 %d %d\n", width, height); + gs_snprintf(BBox, sizeof(BBox), "%%%%BoundingBox: 0 0 %d %d\n", width, height); stream_write(s, (byte *)BBox, strlen(BBox)); if (pdev->params.CompressPages || pdev->CompressEntireFile) { /* When CompressEntireFile is true and ASCII85EncodePages is false, @@ -1544,7 +1544,7 @@ void pdf_reserve_object_id(gx_device_pdf * pdev, pdf_resource_t *pres, long id) { pres->object->id = (id == 0 ? pdf_obj_ref(pdev) : id); - gs_sprintf(pres->rname, "R%ld", pres->object->id); + gs_snprintf(pres->rname, sizeof(pres->rname), "R%ld", pres->object->id); } /* Begin an aside (resource, annotation, ...). */ @@ -2006,7 +2006,7 @@ pdf_store_default_Producer(char buf[PDF_MAX_PRODUCER]) int minor = (int)(gs_revision - (major * 1000)) / 10; int patch = gs_revision % 10; - gs_sprintf(buf, "(%s %d.%02d.%d)", gs_product, major, minor, patch); + gs_snprintf(buf, PDF_MAX_PRODUCER, "(%s %d.%02d.%d)", gs_product, major, minor, patch); } /* Write matrix values. */ @@ -2053,7 +2053,7 @@ pdf_put_name_chars_1_2(stream *s, const byte *nstr, uint size) case '[': case ']': case '{': case '}': case '/': - gs_sprintf(hex, "#%02x", c); + gs_snprintf(hex, sizeof(hex), "#%02x", c); stream_puts(s, hex); break; case 0: diff --git a/devices/vector/gdevpdfv.c b/devices/vector/gdevpdfv.c index d0d0ddd94..8a44dcce9 100644 --- a/devices/vector/gdevpdfv.c +++ b/devices/vector/gdevpdfv.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -157,7 +157,7 @@ pdf_pattern(gx_device_pdf *pdev, const gx_drawing_color *pdc, if (pcd_XObject == 0) return_error(gs_error_VMerror); - gs_sprintf(key, "/R%ld", pcs_image->id); + gs_snprintf(key, sizeof(key), "/R%ld", pcs_image->id); /* This is non-obvious code. Previously we would put the image object (pcs_image) * into the Resources dit. When we come to write out the Resources dict * that code writes a reference (index 0 R) using the ID from the object. @@ -203,7 +203,7 @@ pdf_pattern(gx_device_pdf *pdev, const gx_drawing_color *pdc, { char buf[MAX_REF_CHARS + 6 + 1]; /* +6 for /R# Do\n */ - gs_sprintf(buf, "/R%ld Do\n", pcs_image->id); + gs_snprintf(buf, sizeof(buf), "/R%ld Do\n", pcs_image->id); cos_stream_add_bytes(pdev, pcos, (const byte *)buf, strlen(buf)); } @@ -622,7 +622,7 @@ pdf_put_linear_shading(gx_device_pdf *pdev, cos_dict_t *pscd, const float *Coord if (Extend[0] | Extend[1]) { char extend_str[1 + 5 + 1 + 5 + 1 + 1]; /* [bool bool] */ - gs_sprintf(extend_str, "[%s %s]", + gs_snprintf(extend_str, sizeof(extend_str), "[%s %s]", (Extend[0] ? "true" : "false"), (Extend[1] ? "true" : "false")); code = cos_dict_put_c_key_string(pscd, "/Extend", diff --git a/devices/vector/gdevpdtb.c b/devices/vector/gdevpdtb.c index 42ef43e4d..5c8fb8d8d 100644 --- a/devices/vector/gdevpdtb.c +++ b/devices/vector/gdevpdtb.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -371,7 +371,7 @@ pdf_base_font_alloc(gx_device_pdf *pdev, pdf_base_font_t **ppbfont, font_name.size -= SUBSET_PREFIX_SIZE; } } else { - gs_sprintf(fnbuf, ".F" PRI_INTPTR, (intptr_t)copied); + gs_snprintf(fnbuf, sizeof(fnbuf), ".F" PRI_INTPTR, (intptr_t)copied); font_name.data = (byte *)fnbuf; font_name.size = strlen(fnbuf); } @@ -572,7 +572,7 @@ pdf_adjust_font_name(gx_device_pdf *pdev, long id, pdf_base_font_t *pbfont) size = i + 1; } /* Create a unique name. */ - gs_sprintf(suffix, "%c%lx", SUFFIX_CHAR, id); + gs_snprintf(suffix, sizeof(suffix), "%c%lx", SUFFIX_CHAR, id); suffix_size = strlen(suffix); data = gs_resize_string(pdev->pdf_memory, chars, size, size + suffix_size, diff --git a/devices/vector/gdevpdtc.c b/devices/vector/gdevpdtc.c index ec51d642e..7ad7dec41 100644 --- a/devices/vector/gdevpdtc.c +++ b/devices/vector/gdevpdtc.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -359,8 +359,8 @@ attach_cmap_resource(gx_device_pdf *pdev, pdf_font_resource_t *pdfont, strcpy(pdfont->u.type0.Encoding_name, (pcmap->WMode ? "/Identity-V" : "/Identity-H")); else - gs_sprintf(pdfont->u.type0.Encoding_name, "%ld 0 R", - pdf_resource_id(pcmres)); + gs_snprintf(pdfont->u.type0.Encoding_name, sizeof(pdfont->u.type0.Encoding_name), + "%ld 0 R", pdf_resource_id(pcmres)); } else { uint size = 0; @@ -386,7 +386,7 @@ attach_cmap_resource(gx_device_pdf *pdev, pdf_font_resource_t *pdfont, pdfont->u.type0.CMapName_size = size; } - gs_sprintf(pdfont->u.type0.Encoding_name, "/%s", *pcmn); + gs_snprintf(pdfont->u.type0.Encoding_name, sizeof(pdfont->u.type0.Encoding_name), "/%s", *pcmn); pdfont->u.type0.cmap_is_standard = true; } pdfont->u.type0.WMode = pcmap->WMode; diff --git a/devices/vector/gdevpdtf.c b/devices/vector/gdevpdtf.c index 7fb3fdcc2..0b7141981 100644 --- a/devices/vector/gdevpdtf.c +++ b/devices/vector/gdevpdtf.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -1230,7 +1230,8 @@ pdf_convert_truetype_font(gx_device_pdf *pdev, pdf_resource_t *pres) if (code < 0) return 0; pdfont->u.cidfont.CIDSystemInfo_id = pdev->IdentityCIDSystemInfo_id; - gs_sprintf(pdfont0->u.type0.Encoding_name, "%ld 0 R", pdf_resource_id(pdev->OneByteIdentityH)); + gs_snprintf(pdfont0->u.type0.Encoding_name, sizeof(pdfont0->u.type0.Encoding_name), + "%ld 0 R", pdf_resource_id(pdev->OneByteIdentityH)); /* Move ToUnicode : */ pdfont0->res_ToUnicode = pdfont->res_ToUnicode; pdfont->res_ToUnicode = 0; pdfont0->cmap_ToUnicode = pdfont->cmap_ToUnicode; pdfont->cmap_ToUnicode = 0; diff --git a/devices/vector/gdevpdti.c b/devices/vector/gdevpdti.c index 3ab2aad46..45a560828 100644 --- a/devices/vector/gdevpdti.c +++ b/devices/vector/gdevpdti.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -1214,7 +1214,7 @@ pdf_add_resource(gx_device_pdf *pdev, cos_dict_t *pcd, const char *key, pdf_reso if (code < 0) return code; } - gs_sprintf(buf, "%ld 0 R\n", pres->object->id); + gs_snprintf(buf, sizeof(buf), "%ld 0 R\n", pres->object->id); if (v != NULL) { if (v->value_type != COS_VALUE_OBJECT && v->value_type != COS_VALUE_RESOURCE) diff --git a/devices/vector/gdevpdtt.c b/devices/vector/gdevpdtt.c index da9396321..079f88a57 100644 --- a/devices/vector/gdevpdtt.c +++ b/devices/vector/gdevpdtt.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -2893,7 +2893,7 @@ pdf_choose_output_glyph_name(gx_device_pdf *pdev, pdf_text_enum_t *penum, gs_con p = (byte *)gs_alloc_string(pdev->pdf_memory, gnstr->size, "pdf_text_set_cache"); if (p == NULL) return_error(gs_error_VMerror); - gs_sprintf(buf, "g%04x", (unsigned int)(glyph & 0xFFFF)); + gs_snprintf(buf, sizeof(buf), "g%04x", (unsigned int)(glyph & 0xFFFF)); memcpy(p, buf, 5); gnstr->data = p; *cleanup = true; diff --git a/devices/vector/gdevpdtw.c b/devices/vector/gdevpdtw.c index ff7148a31..907c7f0c1 100644 --- a/devices/vector/gdevpdtw.c +++ b/devices/vector/gdevpdtw.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -885,7 +885,7 @@ pdf_write_OneByteIdentityH(gx_device_pdf *pdev) code = cos_dict_put_string_copy(pcd, "/CMapName", "/OneByteIdentityH"); if (code < 0) return code; - gs_sprintf(buf, "%ld 0 R", pdev->IdentityCIDSystemInfo_id); + gs_snprintf(buf, sizeof(buf), "%ld 0 R", pdev->IdentityCIDSystemInfo_id); code = cos_dict_put_string_copy(pcd, "/CIDSystemInfo", buf); if (code < 0) return code; diff --git a/devices/vector/gdevpsf1.c b/devices/vector/gdevpsf1.c index 672ce2417..c045c7140 100644 --- a/devices/vector/gdevpsf1.c +++ b/devices/vector/gdevpsf1.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -663,12 +663,12 @@ write_Private(stream *s, gs_font_type1 *pfont, gs_free_object(pfont->memory, SubrsWithMM, "free Subrs record"); return code; } - gs_sprintf(buf, "dup %d %u -| ", i, code); + gs_snprintf(buf, sizeof(buf), "dup %d %u -| ", i, code); stream_puts(s, buf); write_CharString(s, stripped, code); gs_free_object(pfont->memory, stripped, "free Subrs copy for OtherSubrs"); } else { - gs_sprintf(buf, "dup %d %u -| ", i, gdata.bits.size); + gs_snprintf(buf, sizeof(buf), "dup %d %u -| ", i, gdata.bits.size); stream_puts(s, buf); write_CharString(s, gdata.bits.data, gdata.bits.size); } diff --git a/devices/vector/gdevpsf2.c b/devices/vector/gdevpsf2.c index cbd52b0f9..a6db8b5bc 100644 --- a/devices/vector/gdevpsf2.c +++ b/devices/vector/gdevpsf2.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -274,7 +274,7 @@ cff_put_real(cff_writer_t *pcw, double f) byte b = 0xff; const char *p; - gs_sprintf(str, "%g", f); + gs_snprintf(str, sizeof(str), "%g", f); sputc(pcw->strm, CD_REAL); for (p = str; ; ++p) { int digit; diff --git a/devices/vector/gdevtxtw.c b/devices/vector/gdevtxtw.c index cbe2b19ef..b4db1d575 100644 --- a/devices/vector/gdevtxtw.c +++ b/devices/vector/gdevtxtw.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2021 Artifex Software, Inc. +/* Copyright (C) 2001-2022 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -647,20 +647,20 @@ static int simple_text_output(gx_device_txtwrite_t *tdev) return 0; } -static int escaped_Unicode (unsigned short Unicode, char *Buf) +static int escaped_Unicode (unsigned short Unicode, char Buf[32]) { switch (Unicode) { - case 0x3C: gs_sprintf(Buf, "<"); break; - case 0x3E: gs_sprintf(Buf, ">"); break; - case 0x26: gs_sprintf(Buf, "&"); break; - case 0x22: gs_sprintf(Buf, """); break; - case 0x27: gs_sprintf(Buf, "'"); break; + case 0x3C: gs_snprintf(Buf, 32, "<"); break; + case 0x3E: gs_snprintf(Buf, 32, ">"); break; + case 0x26: gs_snprintf(Buf, 32, "&"); break; + case 0x22: gs_snprintf(Buf, 32, """); break; + case 0x27: gs_snprintf(Buf, 32, "'"); break; default: if (Unicode >= 32 && Unicode <= 127) - gs_sprintf(Buf, "%c", Unicode); + gs_snprintf(Buf, 32, "%c", Unicode); else - gs_sprintf(Buf, "&#x%x;", Unicode); + gs_snprintf(Buf, 32, "&#x%x;", Unicode); break; } @@ -683,13 +683,13 @@ static int decorated_text_output(gx_device_txtwrite_t *tdev) x_entry = tdev->PageData.unsorted_text_list; while (x_entry) { next_x = x_entry->next; - gs_sprintf(TextBuffer, "<span bbox=\"%0.0f %0.0f %0.0f %0.0f\" font=\"%s\" size=\"%0.4f\">\n", x_entry->start.x, x_entry->start.y, + gs_snprintf(TextBuffer, sizeof(TextBuffer), "<span bbox=\"%0.0f %0.0f %0.0f %0.0f\" font=\"%s\" size=\"%0.4f\">\n", x_entry->start.x, x_entry->start.y, x_entry->end.x, x_entry->end.y, x_entry->FontName,x_entry->size); gp_fwrite(TextBuffer, 1, strlen(TextBuffer), tdev->file); xpos = x_entry->start.x; for (i=0;i<x_entry->Unicode_Text_Size;i++) { - escaped_Unicode(x_entry->Unicode_Text[i], (char *)&Escaped); - gs_sprintf(TextBuffer, "<char bbox=\"%0.0f %0.0f %0.0f %0.0f\" c=\"%s\"/>\n", xpos, + escaped_Unicode(x_entry->Unicode_Text[i], Escaped); + gs_snprintf(TextBuffer, sizeof(TextBuffer), "<char bbox=\"%0.0f %0.0f %0.0f %0.0f\" c=\"%s\"/>\n", xpos, x_entry->start.y, xpos + x_entry->Widths[i], x_entry->end.y, Escaped); gp_fwrite(TextBuffer, 1, strlen(TextBuffer), tdev->file); xpos += x_entry->Widths[i]; @@ -806,13 +806,13 @@ static int decorated_text_output(gx_device_txtwrite_t *tdev) gp_fwrite("<line>\n", sizeof(unsigned char), 7, tdev->file); x_entry = block_line->x_ordered_list; while(x_entry) { - gs_sprintf(TextBuffer, "<span bbox=\"%0.0f %0.0f %0.0f %0.0f\" font=\"%s\" size=\"%0.4f\">\n", x_entry->start.x, x_entry->start.y, + gs_snprintf(TextBuffer, sizeof(TextBuffer), "<span bbox=\"%0.0f %0.0f %0.0f %0.0f\" font=\"%s\" size=\"%0.4f\">\n", x_entry->start.x, x_entry->start.y, x_entry->end.x, x_entry->end.y, x_entry->FontName,x_entry->size); gp_fwrite(TextBuffer, 1, strlen(TextBuffer), tdev->file); xpos = x_entry->start.x; for (i=0;i<x_entry->Unicode_Text_Size;i++) { - escaped_Unicode(x_entry->Unicode_Text[i], (char *)&Escaped); - gs_sprintf(TextBuffer, "<char bbox=\"%0.0f %0.0f %0.0f %0.0f\" c=\"%s\"/>\n", xpos, + escaped_Unicode(x_entry->Unicode_Text[i], Escaped); + gs_snprintf(TextBuffer, sizeof(TextBuffer), "<char bbox=\"%0.0f %0.0f %0.0f %0.0f\" c=\"%s\"/>\n", xpos, x_entry->start.y, xpos + x_entry->Widths[i], x_entry->end.y, Escaped); gp_fwrite(TextBuffer, 1, strlen(TextBuffer), tdev->file); xpos += x_entry->Widths[i]; |