Commit Graph

2822 Commits

Author SHA1 Message Date
Luis Díaz Más
2ae0cffe18 isinf for Visual Studio versions previous to 2013 2018-09-10 10:31:00 +02:00
Luis Díaz Más
4161099b91 Fix warnings reported by MSVC 2018-09-10 10:31:00 +02:00
Luis Díaz Más
da24df0ba0 snprintf versions for VS versions previous to 2015 2018-09-10 10:31:00 +02:00
Luis Diaz Mas
67e448669e Use -Wno-format-overflow when compiling value.cpp to skip false positive warning 2018-09-10 08:40:55 +02:00
Luis Díaz Más
597b17fff5 Simplify timegm.h and make it usable with MINGW 2018-09-02 19:05:01 +02:00
Dan Čermák
1e23238fa4 Fix memory leak in Params::getopt() 2018-09-01 20:19:45 +02:00
clanmills
3c42fdddeb Fix include <exiv2/exiv2.hpp> to include exiv2/config.h (and consequential changes)
Fix cltest.cpp and version.cpp to report MSVC 2017 in which _MSC_VER == 1910
2018-09-01 20:19:45 +02:00
Robin Mills
74bc0e0535 Changes for cross-platform getopt 2018-09-01 20:19:45 +02:00
Hombre
a226d6a650 Fixing typo in cmakefiles and removing REGEX dependencie for Cygwin 2018-08-31 08:31:20 +02:00
Hombre
28da26f174 Adding MINGW32 toolchain support 2018-08-31 08:31:20 +02:00
Dan Čermák
7d9ed33bde Initialize DataBuf with 0s => fix valgrind error 2018-08-30 16:26:56 +02:00
Dan Čermák
9f1a5a1ebb [futils] Change signature of getEnv to take an int
While taking an EnVar as the parameter is more clear it has the
disadvantage, that passing anything outside of the range of the
enumeration is undefined behavior. The compiler could then optimize
the range check in getEnv away (perfectly legal due to UB), leading
to buffer overreads.
2018-08-27 17:22:33 +02:00
Dan Čermák
11df43be78 [types] Apply Safe::abs() in floatToRationalCast & gcd
Also check for infinity in floatToRationalCast as depending on the
compiler special values of floats are converted to either
LONGMAX/LONGMIN or +/-inf
2018-08-27 17:21:16 +02:00
Dan Čermák
2dacb19933 [safe_op] Add Safe::abs(), calculates absoulte value without UB
Add a drop-in replacement for std::abs which never produces
negative values and thereby never invokes undefined behavior.
2018-08-27 17:21:16 +02:00
Luis Diaz Mas
8b47a8efc1 Include timegh.h in file which needs it 2018-08-27 13:33:02 +02:00
Luis Diaz Mas
a9c9451588 Remove localtime.c and any other trick to handle timegm 2018-08-27 13:33:02 +02:00
Luis Diaz Mas
eb306fdbae Substitute malloc/free with new/delete 2018-08-27 13:24:47 +02:00
Luis Diaz Mas
eefee8125b to_hex and from_hex removed from API 2018-08-27 13:24:47 +02:00
Luis Diaz Mas
41499b8ecd Use snprintf instead of sprintf in TimeValue::copy
- Replaced assert by enforce
2018-08-27 13:02:56 +02:00
Luis Diaz Mas
7d8edbe781 Remove more dead code 2018-08-26 09:23:08 +02:00
Luis Diaz Mas
00502eabdd Move mrwthumb to samples 2018-08-26 09:23:08 +02:00
Luis Diaz Mas
e9a6597a48 Move xmpdump to samples 2018-08-26 09:23:08 +02:00
Luis Diaz Mas
ac51fda7b5 Move crwparse to samples 2018-08-26 09:23:08 +02:00
Luis Diaz Mas
32b618b1c7 Move crwedit from exiv2lib to samples 2018-08-26 09:23:08 +02:00
Luis Diaz Mas
f9b2784055 Remove utiltest.cpp that is not compiled 2018-08-26 09:23:08 +02:00
Luis Diaz Mas
00f86a8df4 Cleanup unused variable warnings 2018-08-24 16:45:52 +02:00
Luis Diaz Mas
6e244f31d3 Cleanup fallthrough warning + clang-format parseCommonTargets function 2018-08-24 16:45:52 +02:00
Dan Čermák
35b3e596ed Add overflow & overread checks to PngChunk::parseTXTChunk()
This function was creating a lot of new pointers and strings without
properly checking the array bounds. This commit adds several calls
to enforce(), making sure that the pointers stay within bounds.
Strings are now created using the helper function
string_from_unterminated() to prevent overreads in the constructor of
std::string.

This fixes #400
2018-08-21 13:46:53 +02:00
Dan Čermák
6da77e2c64 Add documentation for parameters of string_from_unterminated 2018-08-21 13:44:35 +02:00
Dan Čermák
b127354429 Simplify string_from_unterminated by using strnlen() 2018-08-21 13:44:35 +02:00
clanmills
ce516eddef Issue-374 2018-08-08 22:28:54 +02:00
Dan Čermák
b12a868454 Add EXV_WARN_UNUSED_RESULT macro & add it to DataBuf::release()
EXV_WARN_UNUSED_RESULT is a conditional macro that expands to either
__attribute__((warn_unused_result)) on gcc & clang or to _Check_return
for MSVC
=> Compiler warns if the return value is ignored
2018-07-29 00:20:43 +02:00
Dan Čermák
1ab921cb83 Add two padding bytes to exifLongHeader to prevent overreads
in the following call:
getHeaderOffset (payload.pData_, payload.size_, (byte*)&exifLongHeader, 6);

getHeaderOffset would read 6 bytes from exifLongHeader, reading beyond the
bounds of the array => add 2 padding bytes to prevent overreads
2018-07-29 00:20:43 +02:00
Dan Čermák
dbf90b976f Fix overread in memcmp in PngImage::doWriteMetadata()
memcmp() compares the read data from key with the provided string, but when
key.pData_ is shorter than the provided length, then memcmp can read beyond the
bounds of key.pData_
=> add custom compare function, which ensures that we never read more than
key.size_
2018-07-29 00:20:43 +02:00
Dan Čermák
8d5a3c7dd9 Remove buffer overread in tExtToDataBuf
The pointer p is advanced in the while loop to step over three '\n'.
However, its length is never reduced accordingly. => the length check in the
following for loop is invalid, as it permits overreading by the number of
characters that p was advanced by.
2018-07-29 00:20:30 +02:00
Dan Čermák
67dc3e691f [IptcData::printStructure] clang-format function 2018-07-29 00:00:52 +02:00
Dan Čermák
b2c3b61abc [IptcData::printStructure] Remove buffer overrun
The loop condition will perform a range check correctly, but it will always
dereference bytes[i], even if i is too large and fails the second check.
=> move the bytes[i] == 0x1c check into a if, after the range check was
successfull
2018-07-28 23:50:33 +02:00
Dan Čermák
39399ac5e8 Remove memory leak in SshIo::SshImpl::getDataByRange
The buffer array is not deleted, when an exception is thrown
(happens for nBytes< 0).
=> use std::vector<char> instead
2018-07-28 23:50:33 +02:00
Dan Čermák
607b19111c [DataBuf] Replace wrong usage of release() with free() 2018-07-28 23:50:33 +02:00
Dan Čermák
1b74db8f51 [types] Add DataBuf::free()
DataBuf::release() easily cause memory leaks, when the return value is
ignored. free() provides the desired behavior, when the internal data should
just be deleted and not used further.
2018-07-28 23:50:33 +02:00
Dan Čermák
81b6d36c90 [webp] Enforce minimum read size in decodeChunks
The size parameter is only checked for upper bounds, but not for lower.
If it is too small, then created dataBuf will be too small and overflow in one
of the subsequent memcpy() calls.

This fixes #378 / CVE-2018-14046
2018-07-16 23:40:56 +02:00
Luis Díaz Más
6a203c70c0 Include missing unused.h header in convert.cpp 2018-07-09 22:17:47 +02:00
Dan Čermák
b761c6d056 Remove useless casts in preview.cpp 2018-06-11 22:55:49 +02:00
Dan Čermák
fe70939f54 Fix addition overflows in range checks in LoaderTiff::getData
Several checks for extracted values performed no overflow checks on the
addition. They can be tricked into passing, albeit the individual summands are
too large.
=> use Safe::add() which now aborts when an overflow occurs
This fixes #366
2018-06-11 22:55:49 +02:00
Dan Čermák
f4e8ed2fd4 Catch all exceptions not caught in exiv2 cli-tool
It effectively looks the same as before, only now we don't call abort() but
instead clean up everything gracefully.
2018-06-11 22:55:49 +02:00
Dan Čermák
937a1a2bd0 Add offset_ and size_ safely in LoaderExifJpeg::LoaderExifJpeg
offset_ can become arbitrarily large and overflows once its added to size_,
this causes all kinds of problems further in the code when offset_ is used
again.
=> Use Safe::add() to catch potential overflows
This fixes #365.
2018-06-11 22:55:41 +02:00
Luis Diaz Mas
abf6e8ec27 Remove code related with autotools 2018-06-08 14:04:25 +02:00
tbeu
6b1615840f Remove redundant check
V547 Expression 'bPrint' is always true. rafimage.cpp 112
V547 Expression 'bPrint' is always true. rafimage.cpp 125
V547 Expression 'bPrint' is always true. rafimage.cpp 136
V547 Expression 'bPrint' is always true. rafimage.cpp 147
V547 Expression 'bPrint' is always true. rafimage.cpp 158
V547 Expression 'bPrint' is always true. rafimage.cpp 169
V547 Expression 'bPrint' is always true. rafimage.cpp 190
V547 Expression 'bPrint' is always true. rafimage.cpp 213
V547 Expression 'bPrint' is always true. rafimage.cpp 236
V547 Expression 'bPrint' is always true. rafimage.cpp 252
V547 Expression 'bPrint' is always true. rafimage.cpp 262
V547 Expression 'bPrint' is always true. rafimage.cpp 272
2018-06-02 09:43:20 +02:00
tbeu
eca251865f Fix check (on comparing unsigned minus signed greater zero)
V555 The expression 'object->sizeDataArea_ - buf.size_ > 0' will work as 'object->sizeDataArea_ != buf.size_'. tiffvisitor.cpp 911
2018-06-02 09:43:20 +02:00
tbeu
bb9034e029 Do not implicitly cast enum to Boolean
V768 The expression 'fileProtocol(path)' is of enum type. It is odd that it is used as an expression of a Boolean-type. futils.cpp 288
2018-06-02 09:43:20 +02:00