summaryrefslogtreecommitdiff
path: root/devices
diff options
context:
space:
mode:
authorRobin Watts <Robin.Watts@artifex.com>2022-02-16 13:06:13 +0000
committerRobin Watts <Robin.Watts@artifex.com>2022-02-16 17:00:43 +0000
commitb3173bfc5f5d60adcb80c10d7ce4cdd1492dfea9 (patch)
tree3a24d6320d96347603de6b2d6ff97113b8251a66 /devices
parent99cc9af68c770cd551025249b760630b2a9e9fb0 (diff)
downloadghostpdl-b3173bfc5f5d60adcb80c10d7ce4cdd1492dfea9.tar.gz
Move devices from gs_sprintf to gs_snprintf.
Diffstat (limited to 'devices')
-rw-r--r--devices/gdev8510.c4
-rw-r--r--devices/gdevccr.c8
-rw-r--r--devices/gdevdjet.c22
-rw-r--r--devices/gdevijs.c18
-rw-r--r--devices/gdevl31s.c8
-rw-r--r--devices/gdevpdfimg.c16
-rw-r--r--devices/gdevpdfocr.c18
-rw-r--r--devices/gdevpng.c2
-rw-r--r--devices/gdevtifs.c6
-rw-r--r--devices/gdevtsep.c14
-rw-r--r--devices/gdevupd.c20
-rw-r--r--devices/gdevwpr2.c10
-rw-r--r--devices/gdevxini.c4
-rw-r--r--devices/vector/gdevpdf.c60
-rw-r--r--devices/vector/gdevpdfe.c6
-rw-r--r--devices/vector/gdevpdfg.c39
-rw-r--r--devices/vector/gdevpdfi.c4
-rw-r--r--devices/vector/gdevpdfm.c10
-rw-r--r--devices/vector/gdevpdfo.c6
-rw-r--r--devices/vector/gdevpdfr.c8
-rw-r--r--devices/vector/gdevpdft.c6
-rw-r--r--devices/vector/gdevpdfu.c34
-rw-r--r--devices/vector/gdevpdfv.c8
-rw-r--r--devices/vector/gdevpdtb.c6
-rw-r--r--devices/vector/gdevpdtc.c8
-rw-r--r--devices/vector/gdevpdtf.c5
-rw-r--r--devices/vector/gdevpdti.c4
-rw-r--r--devices/vector/gdevpdtt.c4
-rw-r--r--devices/vector/gdevpdtw.c4
-rw-r--r--devices/vector/gdevpsf1.c6
-rw-r--r--devices/vector/gdevpsf2.c4
-rw-r--r--devices/vector/gdevtxtw.c30
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, "&lt;"); break;
- case 0x3E: gs_sprintf(Buf, "&gt;"); break;
- case 0x26: gs_sprintf(Buf, "&amp;"); break;
- case 0x22: gs_sprintf(Buf, "&quot;"); break;
- case 0x27: gs_sprintf(Buf, "&apos;"); break;
+ case 0x3C: gs_snprintf(Buf, 32, "&lt;"); break;
+ case 0x3E: gs_snprintf(Buf, 32, "&gt;"); break;
+ case 0x26: gs_snprintf(Buf, 32, "&amp;"); break;
+ case 0x22: gs_snprintf(Buf, 32, "&quot;"); break;
+ case 0x27: gs_snprintf(Buf, 32, "&apos;"); 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];