On Tue, Jan 18, 2005 at 08:57:07PM +0900, Ryuichi Arafune wrote:
> From: Daniel Kobras <[EMAIL PROTECTED]>
> > An updated package for unstable is already sitting in incoming and
> > should soon become available in testing as well. However, I've just
> > verified that the vulnerability is present in the woody version as well,
> > so this bug still needs to be acted upon. Ryuichi, do you want to
> > prepare updated woody packages yourself? Otherwise, I'd offer to do so.
> Please do it. Now, I'm busy. And I don't have woody system.
Okay, I've sent updated packages to the security team. Debdiff to the
previous version in stable is attached. While preparing the stable
update, I noted that the patch applied in 6.0.6.2-2 only fixes part of
the issue because it missed the second boundary check applied (and
well-hidden in a pile of unrelated changes) by upstream. Unless you get
around to it sooner than me, I'll try to fix this up in a 6.0.6.2-2.1
upload as soon as possible.
Regards,
Daniel.
diff -u imagemagick-5.4.4.5/debian/changelog
imagemagick-5.4.4.5/debian/changelog
--- imagemagick-5.4.4.5/debian/changelog
+++ imagemagick-5.4.4.5/debian/changelog
@@ -1,3 +1,11 @@
+imagemagick (4:5.4.4.5-1woody5) stable-security; urgency=high
+
+ * Non-maintainer upload for the Security Team.
+ * coders/psd.c: Fix potential heap overflow when reading Photoshop
+ image files (CAN-2005-0005). Closes: #291033
+
+ -- Daniel Kobras <[EMAIL PROTECTED]> Tue, 18 Jan 2005 12:43:45 +0100
+
imagemagick (4:5.4.4.5-1woody4) stable-security; urgency=high
* Non-maintainer upload for the Security Team.
only in patch2:
unchanged:
--- imagemagick-5.4.4.5.orig/coders/psd.c
+++ imagemagick-5.4.4.5/coders/psd.c
@@ -408,6 +408,8 @@
static Image *ReadPSDImage(const ImageInfo *image_info,ExceptionInfo
*exception)
{
+#define MaxPSDChannels 24
+
typedef enum
{
BitmapMode = 0,
@@ -439,7 +441,7 @@
channels;
ChannelInfo
- channel_info[24];
+ channel_info[MaxPSDChannels];
char
blendkey[4];
@@ -558,6 +560,8 @@
ThrowReaderException(CorruptImageWarning,"Not a PSD image file",image);
(void) ReadBlob(image,6,(char *) psd_info.reserved);
psd_info.channels=ReadBlobMSBShort(image);
+ if (psd_info.channels > MaxPSDChannels)
+ ThrowReaderException(CorruptImageError,"MaximumChannelsExceeded",image);
psd_info.rows=ReadBlobMSBLong(image);
psd_info.columns=ReadBlobMSBLong(image);
psd_info.depth=ReadBlobMSBShort(image);
@@ -681,6 +685,9 @@
layer_info[i].page.height=(ReadBlobMSBLong(image)-layer_info[i].page.y);
layer_info[i].page.width=(ReadBlobMSBLong(image)-layer_info[i].page.x);
layer_info[i].channels=ReadBlobMSBShort(image);
+ if (layer_info[i].channels > MaxPSDChannels)
+ ThrowReaderException(CorruptImageError,"MaximumChannelsExceeded",
+ image);
for (j=0; j < layer_info[i].channels; j++)
{
layer_info[i].channel_info[j].type=ReadBlobMSBShort(image);