]> granicus.if.org Git - imagemagick/commitdiff
Fixed bounds checking when setting the filename.
authorDirk Lemstra <dirk@git.imagemagick.org>
Sun, 28 Jan 2018 13:05:40 +0000 (14:05 +0100)
committerDirk Lemstra <dirk@git.imagemagick.org>
Sun, 28 Jan 2018 13:05:40 +0000 (14:05 +0100)
Magick++/lib/Image.cpp
Magick++/lib/Options.cpp

index 1aadf87c4f5ed7a4ad92f0b1fa02e88e34615092..3629931687eb091523e2c6ce71d778748ebde2d9 100644 (file)
@@ -757,10 +757,17 @@ Magick::Blob Magick::Image::exifProfile(void) const
 
 void Magick::Image::fileName(const std::string &fileName_)
 {
+  ssize_t
+    max_length;
+
   modifyImage();
 
-  fileName_.copy(image()->filename,sizeof(image()->filename)-1);
-  image()->filename[fileName_.length()]=0; // Null terminate
+  max_length=sizeof(image()->filename)-1;
+  fileName_.copy(image()->filename,max_length);
+  if (fileName_.length() > max_length)
+    image()->filename[max_length]=0;
+  else
+    image()->filename[fileName_.length()]=0;
 
   options()->fileName(fileName_);
 }
index bacf348a2716affd40abf69328375c02c08c1fa4..a6d9027dc5d501e1dc70d9b4c28ef40d00dc6173 100644 (file)
@@ -223,9 +223,13 @@ FILE *Magick::Options::file(void) const
 
 void Magick::Options::fileName(const std::string &fileName_)
 {
-  fileName_.copy(_imageInfo->filename,MagickPathExtent-1);
-  if (fileName_.length() > MagickPathExtent-1)
-    _imageInfo->filename[MagickPathExtent-1]=0;
+  ssize_t
+    max_length;
+
+  max_length=sizeof(_imageInfo->filename)-1;
+  fileName_.copy(_imageInfo->filename,max_length);
+  if (fileName_.length() > max_length)
+    _imageInfo->filename[max_length]=0;
   else
     _imageInfo->filename[fileName_.length()]=0;
 }