GraphicsMagick: Replace strcpy() with strlcpy(), replace strcat(...

GraphicsMagick Commits <[email protected]>
Newsgroups gmane.comp.video.graphicsmagick.cvs
Message-ID <mailman.16582.1668271247.1350.graphicsmagick-commit@lists.sourceforge.net>
changeset 1d0727a50c9a in /hg/GraphicsMagick
details: http://hg.GraphicsMagick.org/hg/GraphicsMagick?cmd=changeset;node=1d0727a50c9a
summary: Replace strcpy() with strlcpy(), replace strcat() with strlcat(), replace sprintf() with snprintf().  Prefer using bounded string functions.

diffstat:

 ChangeLog                              |   6 +++
 README.txt                             |   8 ++--
 VisualMagick/installer/inc/version.isx |   4 +-
 coders/dcm.c                           |   6 +-
 coders/dpx.c                           |   8 ++--
 coders/ept.c                           |  12 +++---
 coders/fax.c                           |   4 +-
 coders/fpx.c                           |   6 +-
 coders/gradient.c                      |   6 +-
 coders/heif.c                          |   2 +-
 coders/html.c                          |   6 +-
 coders/icon.c                          |   6 +-
 coders/jpeg.c                          |   2 +-
 coders/jxl.c                           |   2 +-
 coders/locale.c                        |   6 +-
 coders/logo.c                          |  14 +++---
 coders/mat.c                           |   4 +-
 coders/meta.c                          |   6 +-
 coders/miff.c                          |  20 +++++-----
 coders/mpc.c                           |  12 +++---
 coders/pict.c                          |   2 +-
 coders/png.c                           |  18 ++++----
 coders/pnm.c                           |  14 +++---
 coders/preview.c                       |  16 ++++----
 coders/ps2.c                           |  10 ++--
 coders/svg.c                           |  18 ++++-----
 coders/uil.c                           |   4 +-
 coders/webp.c                          |   4 +-
 coders/wmf.c                           |   6 +-
 coders/wpg.c                           |   2 +-
 coders/xbm.c                           |  12 +++---
 coders/xpm.c                           |   8 ++--
 coders/xtrn.c                          |  16 ++++----
 magick/animate.c                       |   2 +-
 magick/attribute.c                     |   8 ++--
 magick/blob.c                          |   4 +-
 magick/command.c                       |  67 ++++++++++++++++++++++++---------
 magick/constitute.c                    |   8 ++--
 magick/delegate.c                      |  14 +++---
 magick/display.c                       |  23 ++++++-----
 magick/image.c                         |  12 +++---
 magick/module.c                        |   6 +-
 magick/studio.h                        |  13 ++++++-
 magick/utility.c                       |  18 ++++----
 magick/version.h                       |   4 +-
 magick/widget.c                        |  36 +++++++++---------
 www/Changelog.html                     |   8 ++++
 www/README.html                        |   8 ++--
 48 files changed, 278 insertions(+), 223 deletions(-)

diffs (truncated from 1764 to 500 lines):

diff -r 6ccfd7d001df -r 1d0727a50c9a ChangeLog
--- a/ChangeLog	Wed Nov 09 19:20:38 2022 -0600
+++ b/ChangeLog	Sat Nov 12 10:40:23 2022 -0600
@@ -1,3 +1,9 @@
+2022-11-12  Bob Friesenhahn  <[email protected]>
+
+	* ALL: Replace strcpy() with strlcpy(), replace strcat() with
+	strlcat(), replace sprintf() with snprintf().  Prefer using
+	bounded string functions.
+
 2022-11-09  Bob Friesenhahn  <[email protected]>
 
 	* coders/png.c (ReadOnePNGImage): Change ping_file_depth to
diff -r 6ccfd7d001df -r 1d0727a50c9a README.txt
--- a/README.txt	Wed Nov 09 19:20:38 2022 -0600
+++ b/README.txt	Sat Nov 12 10:40:23 2022 -0600
@@ -378,10 +378,10 @@
 
     https://github.com/strukturag/libde265
 
-  to read HEIF/h.265 files. Libheif makes use of libde265 for
-  h.265/HEVC decoding and libx265 for encoding.  GraphicsMagick does
-  not itself provide any h.265/HEVC algoriths and it does not
-  currently support encoding.
+  to read HEIF/h.265 files and HEIF/AVIF files. Libheif makes use of
+  libde265 for h.265/HEVC decoding and libx265 for encoding.
+  GraphicsMagick does not itself provide any h.265/HEVC algoriths and
+  it does not currently support encoding.
 
   The HEVC codec is covered by a huge number of patents (the MPEG LA
   HEVC patent list is 164 pages long!).  While GraphicsMagick is
diff -r 6ccfd7d001df -r 1d0727a50c9a VisualMagick/installer/inc/version.isx
--- a/VisualMagick/installer/inc/version.isx	Wed Nov 09 19:20:38 2022 -0600
+++ b/VisualMagick/installer/inc/version.isx	Sat Nov 12 10:40:23 2022 -0600
@@ -10,5 +10,5 @@
 
 #define public MagickPackageName "GraphicsMagick"
 #define public MagickPackageVersion "1.4"
-#define public MagickPackageVersionAddendum ".020221109"
-#define public MagickPackageReleaseDate "snapshot-20221109"
+#define public MagickPackageVersionAddendum ".020221112"
+#define public MagickPackageReleaseDate "snapshot-20221112"
diff -r 6ccfd7d001df -r 1d0727a50c9a coders/dcm.c
--- a/coders/dcm.c	Wed Nov 09 19:20:38 2022 -0600
+++ b/coders/dcm.c	Sat Nov 12 10:40:23 2022 -0600
@@ -1,5 +1,5 @@
 /*
-% Copyright (C) 2003-2021 GraphicsMagick Group
+% Copyright (C) 2003-2022 GraphicsMagick Group
 % Copyright (C) 2002 ImageMagick Studio
 % Copyright 1991-1999 E. I. du Pont de Nemours and Company
 %
@@ -6150,7 +6150,7 @@
             2) element vr is set as "xs" ie is not of a fixed type
           */
           use_explicit=True;
-          strcpy(implicit_vr,explicit_vr);
+          strlcpy(implicit_vr,explicit_vr,sizeof(implicit_vr));
         }
     }
   if ((!use_explicit) || (strcmp(implicit_vr,"!!") == 0))
@@ -7360,7 +7360,7 @@
               }
           if (status == MagickPass)
             {
-              strcpy(next_image->filename,(*image)->filename);
+              strlcpy(next_image->filename,(*image)->filename,sizeof(next_image->filename));
               next_image->scene=scene;
               if (image_list == (Image*)NULL)
                 image_list=next_image;
diff -r 6ccfd7d001df -r 1d0727a50c9a coders/dpx.c
--- a/coders/dpx.c	Wed Nov 09 19:20:38 2022 -0600
+++ b/coders/dpx.c	Sat Nov 12 10:40:23 2022 -0600
@@ -531,7 +531,7 @@
 \
   if (!IS_UNDEFINED_U32(member)) \
     { \
-      SMPTEBitsToString(member,buffer_); \
+      SMPTEBitsToString(member,buffer_,sizeof(buffer_)); \
       (void) SetImageAttribute(image,name,buffer_); \
       LogSetImageAttribute(name,buffer_); \
     } \
@@ -622,7 +622,7 @@
   MagickSwabFloat(&tv_info->white_level.f);
   MagickSwabFloat(&tv_info->integration_time.f);
 }
-STATIC void SMPTEBitsToString(const U32 value, char *str)
+STATIC void SMPTEBitsToString(const U32 value, char *str, size_t str_length)
 {
   unsigned int
     pos,
@@ -630,11 +630,11 @@
 
   for (pos=8; pos != 0; pos--, shift -= 4)
     {
-      (void) sprintf(str,"%01u",(unsigned int) ((value >> shift) & 0x0fU));
+      (void) snprintf(str,3,"%01u",(unsigned int) ((value >> shift) & 0x0fU));
       str += 1;
       if ((pos > 2) && (pos % 2))
         {
-          (void) strcat(str,":");
+          (void) strlcat(str,":",str_length);
           str++;
         }
     }
diff -r 6ccfd7d001df -r 1d0727a50c9a coders/ept.c
--- a/coders/ept.c	Wed Nov 09 19:20:38 2022 -0600
+++ b/coders/ept.c	Sat Nov 12 10:40:23 2022 -0600
@@ -402,8 +402,8 @@
     {
       do
         {
-          (void) strcpy(image->magick,"PS");
-          (void) strlcpy(image->filename,filename,MaxTextExtent);
+          (void) strlcpy(image->magick,"PS",sizeof(image->magick));
+          (void) strlcpy(image->filename,filename,sizeof(image->filename));
           next_image=SyncNextImageInList(image);
           if (next_image != (Image *) NULL)
             image=next_image;
@@ -575,16 +575,16 @@
         ThrowWriterTemporaryFileException(ps_filename);
 
       /* Select desired EPS level */
-      (void) strcpy(subformat,"eps");
+      (void) strlcpy(subformat,"eps",sizeof(subformat));
       if (LocaleCompare(image_info->magick,"EPT2") == 0)
-        (void) strcpy(subformat,"eps2");
+        (void) strlcpy(subformat,"eps2",sizeof(subformat));
       else if (LocaleCompare(image_info->magick,"EPT3") == 0)
-        (void) strcpy(subformat,"eps3");
+        (void) strlcpy(subformat,"eps3",sizeof(subformat));
 
       /* JPEG compression requires at least EPS2 */
       if ((image->compression == JPEGCompression) &&
           (LocaleCompare(subformat,"EPS") == 0))
-        (void) strcpy(subformat,"eps2");
+        (void) strlcpy(subformat,"eps2",sizeof(subformat));
 
       FormatString(image->filename,"%s:%.1024s",subformat,ps_filename);
       if (logging)
diff -r 6ccfd7d001df -r 1d0727a50c9a coders/fax.c
--- a/coders/fax.c	Wed Nov 09 19:20:38 2022 -0600
+++ b/coders/fax.c	Sat Nov 12 10:40:23 2022 -0600
@@ -1,5 +1,5 @@
 /*
-% Copyright (C) 2003-2018 GraphicsMagick Group
+% Copyright (C) 2003-2022 GraphicsMagick Group
 % Copyright (C) 2002 ImageMagick Studio
 % Copyright 1991-1999 E. I. du Pont de Nemours and Company
 %
@@ -309,7 +309,7 @@
     ThrowWriterException(FileOpenError,UnableToOpenFile,image);
   image_list_length=GetImageListLength(image);
   clone_info=CloneImageInfo(image_info);
-  (void) strcpy(clone_info->magick,"FAX");
+  (void) strlcpy(clone_info->magick,"FAX",sizeof(clone_info->magick));
   scene=0;
   do
   {
diff -r 6ccfd7d001df -r 1d0727a50c9a coders/fpx.c
--- a/coders/fpx.c	Wed Nov 09 19:20:38 2022 -0600
+++ b/coders/fpx.c	Sat Nov 12 10:40:23 2022 -0600
@@ -1,5 +1,5 @@
 /*
-% Copyright (C) 2003-2020 GraphicsMagick Group
+% Copyright (C) 2003-2022 GraphicsMagick Group
 % Copyright (C) 2002 ImageMagick Studio
 % Copyright 1991-1999 E. I. du Pont de Nemours and Company
 %
@@ -894,9 +894,9 @@
       summary_info.comments_valid=True;
       summary_info.comments.length=strlen(comment->value);
       summary_info.comments.ptr=MagickAllocateMemory(unsigned char *,
-        strlen(comment->value)+1);
+        summary_info.comments.length+1);
       if (summary_info.comments.ptr != (unsigned char *) NULL)
-        (void) strcpy((char *) summary_info.comments.ptr,comment->value);
+        (void) strlcpy((char *) summary_info.comments.ptr,comment->value,summary_info.comments.length+1);
       else
         ThrowWriterException(CoderError,UnableToSetImageComments,image);
     }
diff -r 6ccfd7d001df -r 1d0727a50c9a coders/gradient.c
--- a/coders/gradient.c	Wed Nov 09 19:20:38 2022 -0600
+++ b/coders/gradient.c	Sat Nov 12 10:40:23 2022 -0600
@@ -1,5 +1,5 @@
 /*
-% Copyright (C) 2003-2019 GraphicsMagick Group
+% Copyright (C) 2003-2022 GraphicsMagick Group
 % Copyright (C) 2002 ImageMagick Studio
 % Copyright 1991-1999 E. I. du Pont de Nemours and Company
 %
@@ -139,9 +139,9 @@
       DestroyImage(image);
       return((Image *) NULL);
     }
-  (void) strcpy(colorname,"white");
+  (void) strlcpy(colorname,"white",sizeof(colorname));
   if (PixelIntensityToQuantum(&start_color) > (0.5*MaxRGB))
-    (void) strcpy(colorname,"black");
+    (void) strlcpy(colorname,"black",sizeof(colorname));
   (void) sscanf(image_info->filename,"%*[^-]-%s",colorname);
   if (!QueryColorDatabase(colorname,&stop_color,exception))
     {
diff -r 6ccfd7d001df -r 1d0727a50c9a coders/heif.c
--- a/coders/heif.c	Wed Nov 09 19:20:38 2022 -0600
+++ b/coders/heif.c	Sat Nov 12 10:40:23 2022 -0600
@@ -543,7 +543,7 @@
   heif_minor=(encoder_version >> 8) & 0xff;
   heif_revision=encoder_version & 0xff;
   *version='\0';
-  (void) sprintf(version,
+  (void) snprintf(version, sizeof(version),
                   "heif v%u.%u.%u", heif_major,
                   heif_minor, heif_revision);
 
diff -r 6ccfd7d001df -r 1d0727a50c9a coders/html.c
--- a/coders/html.c	Wed Nov 09 19:20:38 2022 -0600
+++ b/coders/html.c	Sat Nov 12 10:40:23 2022 -0600
@@ -1,5 +1,5 @@
 /*
-% Copyright (C) 2003-2017 GraphicsMagick Group
+% Copyright (C) 2003-2022 GraphicsMagick Group
 % Copyright (C) 2002 ImageMagick Studio
 % Copyright 1991-1999 E. I. du Pont de Nemours and Company
 %
@@ -371,7 +371,7 @@
       AppendImageFormat("gif",image->filename);
       next=image->next;
       image->next=(Image *) NULL;
-      (void) strcpy(image->magick,"GIF");
+      (void) strlcpy(image->magick,"GIF",sizeof(image->magick));
       (void) WriteImage(clone_info,image);
       image->next=next;
       /*
@@ -385,7 +385,7 @@
             image->filename[p-filename]='\0';
             break;
           }
-      (void) strcat(image->filename,"_map.shtml");
+      (void) strlcat(image->filename,"_map.shtml",sizeof(image->filename));
     }
   /*
     Open image map.
diff -r 6ccfd7d001df -r 1d0727a50c9a coders/icon.c
--- a/coders/icon.c	Wed Nov 09 19:20:38 2022 -0600
+++ b/coders/icon.c	Sat Nov 12 10:40:23 2022 -0600
@@ -1,5 +1,5 @@
 /*
-% Copyright (C) 2003-2020 GraphicsMagick Group
+% Copyright (C) 2003-2022 GraphicsMagick Group
 % Copyright (C) 2002 ImageMagick Studio
 % Copyright 1991-1999 E. I. du Pont de Nemours and Company
 %
@@ -304,9 +304,9 @@
       }
     format[0]='\0';
     if (memcmp(data,"\050\000\000\000",4) == 0)
-      (void) strcpy(format,"ICODIB");
+      (void) strlcpy(format,"ICODIB",sizeof(format));
     else if (memcmp(data,"\211PNG\r\n\032\n",8) == 0)
-      (void) strcpy(format,"PNG");
+      (void) strlcpy(format,"PNG",sizeof(format));
     if (format[0] == '\0')
       {
         MagickFreeResourceLimitedMemory(data);
diff -r 6ccfd7d001df -r 1d0727a50c9a coders/jpeg.c
--- a/coders/jpeg.c	Wed Nov 09 19:20:38 2022 -0600
+++ b/coders/jpeg.c	Sat Nov 12 10:40:23 2022 -0600
@@ -2138,7 +2138,7 @@
     profile=MagickAllocateResourceLimitedMemory(unsigned char *,length+14);
     if (profile == (unsigned char *) NULL)
       break;
-    (void) strcpy((char *) profile,"ICC_PROFILE");
+    (void) strlcpy((char *) profile,"ICC_PROFILE",sizeof(profile));
     profile[12]=(unsigned char) ((i/65519)+1);
     profile[13]=(unsigned char) ((profile_length/65519)+1);
     for (j=0; j < (long) length; j++)
diff -r 6ccfd7d001df -r 1d0727a50c9a coders/jxl.c
--- a/coders/jxl.c	Wed Nov 09 19:20:38 2022 -0600
+++ b/coders/jxl.c	Sat Nov 12 10:40:23 2022 -0600
@@ -1126,7 +1126,7 @@
   jxl_minor=(encoder_version >> 8) & 0xff;
   jxl_revision=encoder_version & 0xff;
   *version='\0';
-  (void) sprintf(version,
+  (void) snprintf(version,sizeof(version),
                   "jxl v%u.%u.%u", jxl_major,
                   jxl_minor, jxl_revision);
 
diff -r 6ccfd7d001df -r 1d0727a50c9a coders/locale.c
--- a/coders/locale.c	Wed Nov 09 19:20:38 2022 -0600
+++ b/coders/locale.c	Sat Nov 12 10:40:23 2022 -0600
@@ -217,7 +217,7 @@
     if (LocaleCompare(keyword,"</locale>") == 0)
       {
         ChopLocaleComponents(locale,1);
-        (void) strcat(locale,"/");
+        (void) strlcat(locale,"/",sizeof(locale));
         continue;
       }
     if (LocaleCompare(keyword,"<localemap>") == 0)
@@ -257,7 +257,7 @@
     if (LocaleCompare(keyword,"</message>") == 0)
       {
         ChopLocaleComponents(locale,2);
-        (void) strcat(locale,"/");
+        (void) strlcat(locale,"/",sizeof(locale));
         continue;
       }
     if (*keyword == '<')
@@ -270,7 +270,7 @@
         if (*(keyword+1) == '/')
           {
             ChopLocaleComponents(locale,1);
-            (void) strcat(locale,"/");
+            (void) strlcat(locale,"/",sizeof(locale));
             continue;
           }
         token[strlen(token)-1]='\0';
diff -r 6ccfd7d001df -r 1d0727a50c9a coders/logo.c
--- a/coders/logo.c	Wed Nov 09 19:20:38 2022 -0600
+++ b/coders/logo.c	Sat Nov 12 10:40:23 2022 -0600
@@ -1,5 +1,5 @@
 /*
-% Copyright (C) 2003-2020 GraphicsMagick Group
+% Copyright (C) 2003-2022 GraphicsMagick Group
 % Parts Copyright (c) 1985-1988 by Supoj Sutanthavibul
 % Parts Copyright (c) 1989-2000 by Brian V. Smith
 % Parts Copyright (c) 1991 by Paul King
@@ -5011,7 +5011,7 @@
   */
   if (!(LocaleCompare(image_info->magick,"IMAGE") == 0) &&
       !(LocaleCompare(image_info->magick,"PATTERN") == 0))
-    (void) strcpy(clone_info->filename,image_info->magick);
+    (void) strlcpy(clone_info->filename,image_info->magick,sizeof(clone_info->filename));
 
   /*
     Search for image name in list
@@ -5019,7 +5019,7 @@
   for( i=0; i < ArraySize(EmbeddedImageList); i++)
     if (LocaleCompare(clone_info->filename, EmbeddedImageList[i].name) == 0)
       {
-        (void) strcpy(clone_info->magick,EmbeddedImageList[i].magick);
+        (void) strlcpy(clone_info->magick,EmbeddedImageList[i].magick,sizeof(clone_info->magick));
         blob=EmbeddedImageList[i].blob;
         extent=EmbeddedImageList[i].extent;
         break;
@@ -5273,17 +5273,17 @@
   if ((characteristics.monochrome) &&
       (logo_image->columns*logo_image->rows < 4097))
     {
-      (void) strcpy(logo_image->magick,"PBM");
+      (void) strlcpy(logo_image->magick,"PBM",sizeof(logo_image->magick));
       length=((logo_image->columns*logo_image->rows)/8)+16;
     }
   else if (LocaleCompare(image_info->magick,"ROSE") == 0)
     {
-      (void) strcpy(logo_image->magick,"PPM");
+      (void) strlcpy(logo_image->magick,"PPM",sizeof(logo_image->magick));
       length=3*logo_image->columns*logo_image->rows;
     }
   else
     {
-      (void) strcpy(logo_image->magick,"GIF");
+      (void) strlcpy(logo_image->magick,"GIF",sizeof(logo_image->magick));
       length=logo_image->columns*logo_image->rows;
     }
   blob=ImageToBlob(image_info,logo_image,&length,&image->exception);
@@ -5311,7 +5311,7 @@
     (void) WriteBlobString(image,buffer);
     if (((i+1) % 12) == 0)
       {
-        (void) strcpy(buffer,"\n    ");
+        (void) strlcpy(buffer,"\n    ",sizeof(buffer));
         (void) WriteBlobString(image,buffer);
       }
     p++;
diff -r 6ccfd7d001df -r 1d0727a50c9a coders/mat.c
--- a/coders/mat.c	Wed Nov 09 19:20:38 2022 -0600
+++ b/coders/mat.c	Sat Nov 12 10:40:23 2022 -0600
@@ -1,5 +1,5 @@
 /*
-% Copyright (C) 2003-2021 GraphicsMagick Group
+% Copyright (C) 2003-2022 GraphicsMagick Group
 % Copyright (C) 2002 ImageMagick Studio
 %
 % This program is covered by multiple licenses, which are described in
@@ -1462,7 +1462,7 @@
     Store MAT header.
   */
   (void) memset(MATLAB_HDR,' ',Min(sizeof(MATLAB_HDR),124));
-  sprintf(MATLAB_HDR,"MATLAB 5.0 MAT-file, Platform: %.8s, Created on: %.3s %.3s %2d %2d:%2d:%2d %d",
+  snprintf(MATLAB_HDR,sizeof(MATLAB_HDR),"MATLAB 5.0 MAT-file, Platform: %.8s, Created on: %.3s %.3s %2d %2d:%2d:%2d %d",
     OsDesc,
     DayOfWTab[t->tm_wday],
     MonthsTab[t->tm_mon],
diff -r 6ccfd7d001df -r 1d0727a50c9a coders/meta.c
--- a/coders/meta.c	Wed Nov 09 19:20:38 2022 -0600
+++ b/coders/meta.c	Sat Nov 12 10:40:23 2022 -0600
@@ -1,5 +1,5 @@
 /*
-% Copyright (C) 2003-2021 GraphicsMagick Group
+% Copyright (C) 2003-2022 GraphicsMagick Group
 % Copyright (C) 2002 ImageMagick Studio
 %
 % This program is covered by multiple licenses, which are described in
@@ -392,7 +392,7 @@
                 name = MagickAllocateResourceLimitedMemory(char *,strlen(newstr)+1);
                 if (name == (char *) NULL)
                   goto parse8BIM_failure;
-                (void) strcpy(name,newstr);
+                (void) strlcpy(name,newstr,sizeof(name));
                 break;
             }
             state++;
@@ -692,7 +692,7 @@
                 name = MagickAllocateResourceLimitedMemory(char *,strlen(newstr)+1);
                 if (name == (char *) NULL)
                   goto parse8BIMW_failure;
-                (void) strcpy(name,newstr);
+                (void) strlcpy(name,newstr,sizeof(name));
                 break;
             }
             state++;
diff -r 6ccfd7d001df -r 1d0727a50c9a coders/miff.c
--- a/coders/miff.c	Wed Nov 09 19:20:38 2022 -0600
+++ b/coders/miff.c	Sat Nov 12 10:40:23 2022 -0600
@@ -2511,11 +2511,11 @@
         /*
           Set image resolution.
         */
-        (void) strcpy(units,"undefined");
+        (void) strlcpy(units,"undefined",sizeof(units));
         if (image->units == PixelsPerInchResolution)
-          (void) strcpy(units,"pixels-per-inch");
+          (void) strlcpy(units,"pixels-per-inch",sizeof(units));
         if (image->units == PixelsPerCentimeterResolution)
-          (void) strcpy(units,"pixels-per-centimeter");
+          (void) strlcpy(units,"pixels-per-centimeter",sizeof(units));
         FormatString(buffer,"Resolution=%gx%g  units=%.1024s\n",
           image->x_resolution,image->y_resolution,units);
         (void) WriteBlobString(image,buffer);
@@ -2557,26 +2557,26 @@
     if (image->dispose != UndefinedDispose)
       {
         if (image->dispose == BackgroundDispose)
-          (void) strcpy(buffer,"dispose=background\n");
+          (void) strlcpy(buffer,"dispose=background\n",sizeof(buffer));
         else
           if (image->dispose == NoneDispose)
-            (void) strcpy(buffer,"dispose=none\n");
+            (void) strlcpy(buffer,"dispose=none\n",sizeof(buffer));
           else
-            (void) strcpy(buffer,"dispose=previous\n");
+            (void) strlcpy(buffer,"dispose=previous\n",sizeof(buffer));
         (void) WriteBlobString(image,buffer);
       }
     if (image->rendering_intent != UndefinedIntent)
       {
         if (image->rendering_intent == SaturationIntent)
-          (void) strcpy(buffer,"rendering-intent=saturation\n");
+          (void) strlcpy(buffer,"rendering-intent=saturation\n",sizeof(buffer));
         else
           if (image->rendering_intent == PerceptualIntent)
-            (void) strcpy(buffer,"rendering-intent=perceptual\n");
+            (void) strlcpy(buffer,"rendering-intent=perceptual\n",sizeof(buffer));
           else
             if (image->rendering_intent == AbsoluteIntent)
-              (void) strcpy(buffer,"rendering-intent=absolute\n");
+              (void) strlcpy(buffer,"rendering-intent=absolute\n",sizeof(buffer));
             else
-              (void) strcpy(buffer,"rendering-intent=relative\n");
+              (void) strlcpy(buffer,"rendering-intent=relative\n",sizeof(buffer));
         (void) WriteBlobString(image,buffer);
       }
     if (image->gamma != 0.0)
diff -r 6ccfd7d001df -r 1d0727a50c9a coders/mpc.c
--- a/coders/mpc.c	Wed Nov 09 19:20:38 2022 -0600
+++ b/coders/mpc.c	Sat Nov 12 10:40:23 2022 -0600
@@ -1233,11 +1233,11 @@
         /*
           Set image resolution.
         */
-        (void) strcpy(units,"undefined");
+        (void) strlcpy(units,"undefined",sizeof(units));
         if (image->units == PixelsPerInchResolution)
-          (void) strcpy(units,"pixels-per-inch");
+          (void) strlcpy(units,"pixels-per-inch",sizeof(units));
         if (image->units == PixelsPerCentimeterResolution)
-          (void) strcpy(units,"pixels-per-centimeter");
+          (void) strlcpy(units,"pixels-per-centimeter",sizeof(units));
         FormatString(buffer,"Resolution=%gx%g  units=%.1024s\n",
           image->x_resolution,image->y_resolution,units);
         (void) WriteBlobString(image,buffer);
@@ -1279,12 +1279,12 @@
     if (image->dispose != UndefinedDispose)
       {
         if (image->dispose == BackgroundDispose)
-          (void) strcpy(buffer,"dispose=background\n");
+          (void) strlcpy(buffer,"dispose=background\n",sizeof(buffer));
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.