Credit to OSS-Fuzz: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=41438
Replace weird sign-conversion code with a simple static_cast.
This commit is contained in:
parent
5444fcea33
commit
35f48ae5c9
@ -691,17 +691,15 @@ namespace Exiv2 {
|
||||
|
||||
std::ostream& PanasonicMakerNote::printAccelerometer(std::ostream& os, const Value& value, const ExifData*)
|
||||
{
|
||||
// value is stored as unsigned int, but should be readed as signed int, so manually convert it
|
||||
int i = value.toLong();
|
||||
i = i - ((i & 0x8000) >> 15) * 0xffff;
|
||||
// value is stored as unsigned int, but should be read as int16_t.
|
||||
const int16_t i = static_cast<int16_t>(value.toLong());
|
||||
return os << i;
|
||||
} // PanasonicMakerNote::printAccelerometer
|
||||
|
||||
std::ostream& PanasonicMakerNote::printRollAngle(std::ostream& os, const Value& value, const ExifData*)
|
||||
{
|
||||
// roll angle is stored as signed int, but tag states to be unsigned int
|
||||
int i = value.toLong();
|
||||
i = i - ((i & 0x8000) >> 15) * 0xffff;
|
||||
// value is stored as unsigned int, but should be read as int16_t.
|
||||
const int16_t i = static_cast<int16_t>(value.toLong());
|
||||
std::ostringstream oss;
|
||||
oss.copyfmt(os);
|
||||
os << std::fixed << std::setprecision(1) << i / 10.0;
|
||||
@ -712,10 +710,8 @@ namespace Exiv2 {
|
||||
|
||||
std::ostream& PanasonicMakerNote::printPitchAngle(std::ostream& os, const Value& value, const ExifData*)
|
||||
{
|
||||
// pitch angle is stored as signed int, but tag states to be unsigned int
|
||||
// change sign to be compatible with ExifTool: positive is upwards
|
||||
int i = value.toLong();
|
||||
i = i - ((i & 0x8000) >> 15) * 0xffff;
|
||||
// value is stored as unsigned int, but should be read as int16_t.
|
||||
const int16_t i = static_cast<int16_t>(value.toLong());
|
||||
std::ostringstream oss;
|
||||
oss.copyfmt(os);
|
||||
os << std::fixed << std::setprecision(1) << -i / 10.0;
|
||||
|
||||
@ -16,6 +16,6 @@ class PanasonicMakerPrintAccelerometerIntOverflow(metaclass=CaseMeta):
|
||||
Exif.Image.DNGPrivateData 0x2020 32 80 97 110 97 115 111 110 105 99 32 32 32 0 32 32 255 32 32 32 32 32 255 255 255 32 255 255 198 52 32 32 0
|
||||
Exif.MakerNote.Offset Long 1 48
|
||||
Exif.MakerNote.ByteOrder Ascii 3 MM
|
||||
Exif.Panasonic.AccelerometerY SLong 4 2147483425
|
||||
Exif.Panasonic.AccelerometerY SLong 4 -224
|
||||
"""]
|
||||
retval = [0]
|
||||
|
||||
Loading…
Reference in New Issue
Block a user