Commit Graph

164 Commits

Author SHA1 Message Date
Michał Walenciak
7e90668011 Adding comment for issue #56 2017-10-02 21:45:05 +02:00
Robin Mills
2f0104879a Merge pull request #81 from piponazo/robinChanges
Robin changes
2017-09-29 10:15:21 +01:00
Luis Díaz Más
8ad49f6d73 Robin changes in sync with master changes 2017-09-28 19:42:57 +02:00
Dan Čermák
74cb5bab13 Fixed wrong brackets: size*count + pad can overflow before the cast
=> Should fix #76 (most of the work has been done by Robin Mills in
   6e3855aed7)

The problem with #76 is the contents of the 26th IFD, with the
following contents:
tag: 0x8649
type: 0x1
count: 0xffff ffff
offset: 0x4974

The issue is the size of count (uint32_t), as adding anything to it
causes an overflow. Especially the expression:
(size*count + pad+20)
results in an overflow and gives 20 as a result instead of
0x100000014, thus the condition in the if in the next line is false
and the program continues to run (until it crashes at io.read).

To properly account for the overflow, the brackets have to be removed,
as then the result is saved in the correctly sized type and not cast
after being calculated in the smaller type.

The brackets have also been removed from bigtiffimage.cpp, where the
same issue is present.
2017-09-27 23:38:49 +02:00
Robin Mills
d8ae4484ae msvc support for bigtiffimage.cpp 2017-09-27 12:24:41 +01:00
clanmills
6e3855aed7 Fix https://github.com/Exiv2/exiv2/issues/55 2017-09-27 09:20:13 +01:00
Michał Walenciak
9acc1c56a7 adding ifd8 and long longs to is8ByteType() 2017-09-24 16:07:26 +02:00
Michał Walenciak
b6e79357de Adding 8-byte swap functions + consts 2017-09-21 18:15:12 +02:00
Michał Walenciak
5ab1a0809d adopt to style 2017-09-21 18:15:12 +02:00
Michał Walenciak
c008ad2403 making tag related functions private 2017-09-21 18:15:12 +02:00
Michał Walenciak
bc6eed0b03 registering new file type 2017-09-21 18:15:12 +02:00
clanmills
21ac4ac61a Test suite changes due to https://github.com/Exiv2/exiv2/pull/68 2017-09-19 10:17:46 +01:00
Michał Walenciak
dff941ad7f Do not print offset when it is used as tag's value 2017-09-18 22:32:52 +02:00
clanmills
d366943297 Refactoring EXV_USE_CURL and EXV_USE_SSH 2017-09-13 16:54:10 +01:00
Michał Walenciak
20582a93c6 Marking members in a proper way. 2017-09-02 08:02:00 +02:00
Michał Walenciak
4e25435afb Changing return type of Image::tagName to std::string 2017-09-02 08:00:07 +02:00
Michał Walenciak
ddb87fe0cf Moving static tagName() into Image class to prevent multithread crashes.
static variables inside of tagName() were not protected against multithread access.
It could cause a crash in case of simultaneous initialization of map of tags.
2017-09-01 18:29:51 +02:00
clanmills
d3c2b99385 #1297 Fix submitted. 2017-06-11 11:56:20 +01:00
Robin Mills
77616c3204 #1289 Thanks to Asdiel (AlienSkin) for reporting this and providing a test file. Thanks to Ben for investigation and patch. 2017-04-14 19:42:53 +00:00
Robin Mills
6d5c2c3256 Getting ready to release v0.26 2017-03-08 20:42:28 +00:00
Robin Mills
012c544704 #1268 Fix submitted. Ben and Robin both discovered and fixed this independantly with the same fix! 2017-02-16 18:23:40 +00:00
Robin Mills
dd4faaf831 #1277 Fix submitted. Thank You to Ben for reporting this and providing a patch. 2017-02-14 20:07:12 +00:00
Robin Mills
fe6c71d0fa #1108 exiv2 -pR to dump type == tiffIfd 2016-12-04 12:18:43 +00:00
Robin Mills
49fbd1d761 #1108 Add support to dump MakerNote IFDs with exiv2 -pR 2016-12-04 06:02:44 +00:00
Robin Mills
81265684f0 #1108 Fixed bugs in printStructure(kpsRecursive) handling of RATIONAL data. 2016-11-12 22:08:10 +00:00
Robin Mills
dd39d165e2 #1247 Fix Linux/GCC compilation warning. Added Hanno's file to the test suite. 2016-10-21 19:19:06 +00:00
Robin Mills
021bf5c237 #1247 Thank You Hanno for reporting this and providing a patch. 2016-10-21 17:44:19 +00:00
Robin Mills
a057af1616 #1244. Removing experimental APIs introduced by r4637. I submitted those APIs just to retain the code somewhere. I have no plan to release such as API. 2016-10-17 16:32:58 +00:00
Robin Mills
f5956d5db2 #1230 Fixes to read tiff with web-ready. Includes the BasicIo expiremental API readUnmarked() and markRead() which I will remove later. 2016-10-17 15:48:42 +00:00
Robin Mills
67efb34461 #1243. Correction to r4627 2016-10-13 12:05:39 +00:00
Robin Mills
2e9138cf91 #1243 Work-in-progress. Still to add code to writeMetadata for icc profiles. 2016-10-13 11:03:39 +00:00
Robin Mills
5f1d52e497 #1230 Added stdin-test and fixing issue identified by the test. 2016-09-25 22:43:40 +00:00
Robin Mills
b46cac7790 #1126 Fixes submitted for msvc2003 2016-09-16 05:33:40 +00:00
Robin Mills
1bea0c6aeb #1108 Better string formatting (and associated test/data changes). Tweaks to code layout for r4497. 2016-09-15 14:09:43 +00:00
Robin Mills
5edc759cc9 #1074 For discussion see: http://dev.exiv2.org/issues/1074#note-23 2016-09-14 10:02:51 +00:00
Robin Mills
9ff2224fd7 #1074. Rollback r4479 which has inflicted a lot harm on the test harness. 2016-09-11 15:31:28 +00:00
Robin Mills
3aaebf50f7 #1074 Added ICC support to tiffimage.writeMetadata(). pngimage.readMetadata() is not complete. 2016-09-09 15:18:59 +00:00
Robin Mills
5f9807cbef #1216. Rollback r4448/6/2/1 r4439/38 to restabilize test suite on trunk. r4449 is copy of r4448 to branches/develop 2016-08-30 16:05:45 +00:00
sridharb
8a8ec67136 This is mainly a fix for #1206, but also interprets missing Canon Exif
Tags in exiv2 with the help of Phil Harvey's exiftool (see
http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Canon.html).

Even with these changes (toward #1204 and #1205), exiv2 lags behind
exiftool in some areas of interpretation of Canon tags. Ideally, a
catch-up effort to bring the code in source: canonmn.cpp in line with
lib/Image/ExifTool/Canon.pm. v10.25 of exiftool was used as reference
for this change.

#1206 seeks to address the fact that when Canon does not have data for
certain tags, they use specific default values in those fields. These
default values need to be ignored and not displayed. This change
brings this feature to exiv2, something that already exiftool does.

With regards to implementation, the struct TagInfo in source: tags.hpp
is extended with four new fields.

The first field is a bool that if set to true (default false), denotes
that this field has ignorable default values.

The second field is the default value that needs to be ignored. This
can be of four types (String, Long, Float, Rational). These four types
were chosen as they had conversion functions in the Value class.

The third field is the comparison type (default equal_to). There are
six comparison types possible (equal_to, not_equal_to, less,
less_equal, greater, greater_equal). This is the comparison applied to
the value stored in the tag's field and the default value specified
above. For e.g. if the value in the tag Exif.CanonCs.RecordMode is -1,
then it needs to be ignored.

The fourth field is the data type (default Long). This could have been
guessed from the type of the second field, but that would necessitate
making this structure into a template calling for changes in multitude
of files.

Usage: In source: canonmn.cpp, several exif tags now have ignorable
default properties. I will list a few examples.

1. Exif.CanonCs.FocusMode:        TagInfo(0x0007, "FocusMode", N_("Focus Mode"), N_("Focus mode setting"), canonCsId, makerTags, signedShort, 1, EXV_PRINT_TAG(canonCsFocusMode)),

There are no changes - i.e. this is an example of how the TagInfo
structure was being populated.

2. Exif.CanonCs.RecordMode:        TagInfo(0x0009, "RecordMode", N_("Record Mode"), N_("Record mode setting"), canonCsId, makerTags, signedShort, 1, EXV_PRINT_TAG(canonCsRecordMode), true, s_1_),

Take a look at the two new arguments. The first one (true) specifies
that there is a default value that can be ignored. The second one s_1_
specifies the value (-1, in this case) to be ignored.

	const UShortValue CanonMakerNote::s_1_(65535, unsignedShort); // Till bug is resolved

Note s_1_ is temporarily having the value 65535 till #1203 that causes
signedShorts to be interpreted as unsignedShorts is resolved.


3. Exif.CanonSi.TargetAperture:         TagInfo(0x0004, "TargetAperture", N_("Target Aperture"), N_("Target Aperture"), canonSiId, makerTags, unsignedShort, 1, printSi0x0015, true, us0_, TagInfo::less_equal),

Note the third argument TagInfo::less_equal. This combined with the
second argument us0_ (the number 0) signifies that any values in this
tag that are less than or equal (<=) to 0 should be ignored.

4. 		TagInfo(0x0028, "ImageUniqueID", N_("Image Unique ID"), N_("Image Unique ID"), canonId, makerTags, asciiString, -1, printValue, true, s0x16_, TagInfo::equal_to, TagInfo::String),

The previous examples have all been of Long type. This shows a case
where the default value is a string.

	const AsciiValue CanonMakerNote::s0x16_("0000000000000000");

Once these tag values have been defined, the actual mechanics of
ignoring these default values happens in Image::exifData().

Before the exifData is returned, we loop through the data, ask the
data whether it needs to be ignored (which in turn checks its
underlying tagInfo and compares it with the default value, if
specified) and if so, deletes that element.

A compile-time switch called EXV_DONT_IGNORE_UNDEFINED which when set
to a non-zero value will cause the behavior to revert back to the
original where all values are reported irregardless of the fact that
they need to be ignored.
2016-08-26 05:36:05 +00:00
draekko
6f7b3ba8f7 #1199 removed convenience converstion for iptc to xmp, apps should handle it directly since webp doesnt support iptc. 2016-08-18 10:10:44 +00:00
Robin Mills
104eb6b7fe #1199 Fixing MSVC build breaker involving long/uint64_t conflict. Minor changes to behaviour of Internal::binaryToHex() 2016-08-13 21:26:16 +00:00
draekko
fe4f6f07f1 #1199 update to binaryToHex, should remove compile warnings and fix extra space padding. 2016-08-13 20:37:24 +00:00
Robin Mills
b09c2049a6 #1199 Fixing build breaker introduced by r4369 2016-08-13 13:28:59 +00:00
draekko
bcaa22ae6f #1199 removed warnings in stringToHex, enabled iptc support for WebPImage. 2016-08-13 02:23:50 +00:00
draekko
71fd0ae96e #1199 (as was discussed) moved WebPImage::debugPrintHex to Internal::binaryToHex 2016-08-12 11:46:51 +00:00
draekko
85cc2f745d #1199 Fixed crash with iptc by disabling it, updated decodeChunk to do better header checks, added hexdump function. 2016-08-11 19:47:48 +00:00
Robin Mills
b3f107bd8c #1199 WebP Support (work in progress). Thank You to Ben for the patch. Thanks to Gilles for encouragement. 2016-08-08 14:33:49 +00:00
Robin Mills
664af57e10 #1034 Added samples/toexv This is a first step to write exif metadata to memory to send to a web service. 2016-04-29 19:20:30 +00:00
Robin Mills
06eabfdd88 #1074. jpgimage.cpp ICC support (Work in Progress) 2016-03-23 17:06:33 +00:00
Robin Mills
e7b804f3f5 #1108 Refactored static indent(depth) from png/tiff/jpeg to Internal::indent(depth) 2016-03-18 07:48:15 +00:00