[prev in list] [next in list] [prev in thread] [next in thread]
List: graphicsmagick-commit
Subject: [GM-commit] GraphicsMagick: Read TGA footer always.
From: GraphicsMagick Commits <graphicsmagick-commit () lists ! sourceforge ! net>
Date: 2022-10-12 23:52:13
Message-ID: mailman.3258.1665618744.1459.graphicsmagick-commit () lists ! sourceforge ! net
[Download RAW message or body]
changeset 33c03991ca04 in /hg/GraphicsMagick
details: http://hg.GraphicsMagick.org/hg/GraphicsMagick?cmd=changeset;node=33c03991ca04
summary: Read TGA footer always.
diffstat:
coders/tga.c | 146 +++++++++++++++++++++++++++++-----------------------------
1 files changed, 72 insertions(+), 74 deletions(-)
diffs (162 lines):
diff -r 0b468264d2e6 -r 33c03991ca04 coders/tga.c
--- a/coders/tga.c Thu Oct 13 00:45:23 2022 +0200
+++ b/coders/tga.c Thu Oct 13 01:51:53 2022 +0200
@@ -381,86 +381,84 @@
memset(&tga_footer, 0, sizeof(tga_footer));
memset(&tga_devel, 0, sizeof(tga_devel));
- if(BlobIsSeekable(image)
- && image->logging) /* TODO: Erase this line, footer is not doing anything \
usefull yet, logging only. */ + if(BlobIsSeekable(image))
{
- status = MagickTrue;
- if(SeekBlob(image,-26, SEEK_END) < 0)
- {
- ThrowReaderException(BlobError,UnableToSeekToOffset,image);
- }
- tga_footer.ExtensionOffset = ReadBlobLSBLong(image);
- tga_footer.DevelopperDirOffset = ReadBlobLSBLong(image);
- if(ReadBlob(image, 16, tga_footer.Signature) != 16) status=MagickFail;
- else
- {
- if((tga_footer.Dot=ReadBlobByte(image)) != '.') status=MagickFail;
- if((tga_footer.Terminator=ReadBlobByte(image)) != 0) status=MagickFail;
- }
-
- if(status == MagickTrue)
+ if(SeekBlob(image,-26, SEEK_END) > 0)
{
- if(image->logging) LogTGAFooter(&tga_footer);
- if(strncmp(tga_footer.Signature,"TRUEVISION-XFILE",16)) status=MagickFail;
- }
- if(status != MagickTrue) // Footer is invalid.
- {
- memset(&tga_footer, 0, sizeof(tga_footer));
- }
+ status = MagickTrue;
+ tga_footer.ExtensionOffset = ReadBlobLSBLong(image);
+ tga_footer.DevelopperDirOffset = ReadBlobLSBLong(image);
+ if(ReadBlob(image, 16, tga_footer.Signature) != 16) status=MagickFail;
+ else
+ {
+ if((tga_footer.Dot=ReadBlobByte(image)) != '.') status=MagickFail;
+ if((tga_footer.Terminator=ReadBlobByte(image)) != 0) status=MagickFail;
+ }
- if(tga_footer.ExtensionOffset > 3)
- {
- if(SeekBlob(image,tga_footer.ExtensionOffset,SEEK_SET) == \
tga_footer.ExtensionOffset)
- {
- tga_devel.ExtensionSize = ReadBlobLSBShort(image);
- if(tga_devel.ExtensionSize >= 495)
+ if(status == MagickTrue)
+ {
+ if(image->logging) LogTGAFooter(&tga_footer);
+ if(strncmp(tga_footer.Signature,"TRUEVISION-XFILE",16)) status=MagickFail;
+ }
+ if(status != MagickTrue) /* Footer is invalid. */
+ {
+ memset(&tga_footer, 0, sizeof(tga_footer));
+ }
+
+ if(tga_footer.ExtensionOffset > 3)
+ {
+ if(SeekBlob(image,tga_footer.ExtensionOffset,SEEK_SET) == \
tga_footer.ExtensionOffset) {
- if(ReadBlob(image, 41, tga_devel.Author) != 41) status=MagickFail;
- if(tga_devel.Author[40] != 0) tga_devel.Author[40]=0;
- if(ReadBlob(image, 324, tga_devel.Comments) != 324) status=MagickFail;
- if(tga_devel.Comments[323] != 0) tga_devel.Comments[323]=0;
- for(i=0; i<6; i++)
+ tga_devel.ExtensionSize = ReadBlobLSBShort(image);
+ if(tga_devel.ExtensionSize >= 495)
{
- tga_devel.TimeStamp[i] = ReadBlobLSBShort(image);
- }
- if(ReadBlob(image, 41, tga_devel.JobNameID) != 41) status=MagickFail;
- if(tga_devel.JobNameID[40] != 0) tga_devel.JobNameID[40]=0;
- for(i=0; i<3; i++)
- {
- tga_devel.JobTime[i] = ReadBlobLSBShort(image);
- }
- if(ReadBlob(image, 41, tga_devel.SoftwareID) != 41) status=MagickFail;
- if(tga_devel.SoftwareID[40] != 0) tga_devel.SoftwareID[40]=0;
- tga_devel.VersionNumber = ReadBlobLSBShort(image);
- tga_devel.VersionLetter = ReadBlobByte(image);
- if(ReadBlob(image, 4, tga_devel.KeyColor) != 4) status=MagickFail;
- for(i=0; i<2; i++)
- {
- tga_devel.AspectRatio[i] = ReadBlobLSBShort(image);
+ if(ReadBlob(image, 41, tga_devel.Author) != 41) status=MagickFail;
+ if(tga_devel.Author[40] != 0) tga_devel.Author[40]=0;
+ if(ReadBlob(image, 324, tga_devel.Comments) != 324) status=MagickFail;
+ if(tga_devel.Comments[323] != 0) tga_devel.Comments[323]=0;
+ for(i=0; i<6; i++)
+ {
+ tga_devel.TimeStamp[i] = ReadBlobLSBShort(image);
+ }
+ if(ReadBlob(image, 41, tga_devel.JobNameID) != 41) status=MagickFail;
+ if(tga_devel.JobNameID[40] != 0) tga_devel.JobNameID[40]=0;
+ for(i=0; i<3; i++)
+ {
+ tga_devel.JobTime[i] = ReadBlobLSBShort(image);
+ }
+ if(ReadBlob(image, 41, tga_devel.SoftwareID) != 41) status=MagickFail;
+ if(tga_devel.SoftwareID[40] != 0) tga_devel.SoftwareID[40]=0;
+ tga_devel.VersionNumber = ReadBlobLSBShort(image);
+ tga_devel.VersionLetter = ReadBlobByte(image);
+ if(ReadBlob(image, 4, tga_devel.KeyColor) != 4) status=MagickFail;
+ for(i=0; i<2; i++)
+ {
+ tga_devel.AspectRatio[i] = ReadBlobLSBShort(image);
+ }
+ for(i=0; i<2; i++)
+ {
+ tga_devel.Gamma[i] = ReadBlobLSBShort(image);
+ }
+ tga_devel.ColorCorrectionOffset = ReadBlobLSBLong(image);
+ tga_devel.PostageStampOffset = ReadBlobLSBLong(image);
+ tga_devel.ScanLineOffset = ReadBlobLSBLong(image);
+ tga_devel.AttributesType = ReadBlobByte(image);
+
+ if(image->logging) LogTGADevel(&tga_devel);
+ if(status == MagickTrue) /* TGA devel is valid */
+ {
+ if(tga_devel.Comments[0] != 0)
+ SetImageAttribute(image, "comment", tga_devel.Comments);
+ if(tga_devel.Author[0] != 0)
+ SetImageAttribute(image, "creator", tga_devel.Author);
+ if(tga_devel.SoftwareID[0] != 0)
+ SetImageAttribute(image, "software", tga_devel.SoftwareID);
+ if(tga_devel.JobNameID[0] != 0)
+ SetImageAttribute(image, "TGA:file.JobName", tga_devel.JobNameID);
+ }
+ else
+ tga_devel.ExtensionSize = 0; /* Invalidate TGA developper area. */
}
- for(i=0; i<2; i++)
- {
- tga_devel.Gamma[i] = ReadBlobLSBShort(image);
- }
- tga_devel.ColorCorrectionOffset = ReadBlobLSBLong(image);
- tga_devel.PostageStampOffset = ReadBlobLSBLong(image);
- tga_devel.ScanLineOffset = ReadBlobLSBLong(image);
- tga_devel.AttributesType = ReadBlobByte(image);
-
- if(image->logging) LogTGADevel(&tga_devel);
- if(status == MagickTrue) /* TGA devel is valid */
- {
- if(tga_devel.Comments[0] != 0)
- SetImageAttribute(image, "comment", tga_devel.Comments);
- if(tga_devel.Author[0] != 0)
- SetImageAttribute(image, "creator", tga_devel.Author);
- if(tga_devel.SoftwareID[0] != 0)
- SetImageAttribute(image, "software", tga_devel.SoftwareID);
- if(tga_devel.JobNameID[0] != 0)
- SetImageAttribute(image, "TGA:file.JobName", tga_devel.JobNameID);
- }
- else
- tga_devel.ExtensionSize = 0; /* Imvalidate TGA developper area. */
}
}
}
_______________________________________________
Graphicsmagick-commit mailing list
Graphicsmagick-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/graphicsmagick-commit
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic