darktable-org / darktable-org/rawspeed

LJpegDecompressor implicit conversion issue

Open
#175 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
C++
Stars
456
Forks
147
PR merge metrics
No merged PRs in 30d

Description

../src/librawspeed/decompressors/LJpegDecompressor.cpp:193:27: runtime error: implicit conversion from type 'int' of value 72278 (32-bit, signed) to type 'std::array<unsigned short, 2>::value_type' (aka 'unsigned short') changed the value to 6742 (16-bit, unsigned)
    #0 0x573a8a in void rawspeed::LJpegDecompressor::decodeN<2, false>()::'lambda'(int)::operator()(int) const /home/lebedevri/rawspeed/build-Clang-SANITIZE/../src/librawspeed/decompressors/LJpegDecompressor.cpp:193:27
    #1 0x564ea1 in rawspeed::unroll_loop_t<void rawspeed::LJpegDecompressor::decodeN<2, false>()::'lambda'(int), 1ul>::repeat(void rawspeed::LJpegDecompressor::decodeN<2, false>()::'lambda'(int) const&) /home/lebedevri/rawspeed/build-Clang-SANITIZE/../src/librawspeed/common/Common.h:221:5
    #2 0x564ea1 in rawspeed::unroll_loop_t<void rawspeed::LJpegDecompressor::decodeN<2, false>()::'lambda'(int), 2ul>::repeat(void rawspeed::LJpegDecompressor::decodeN<2, false>()::'lambda'(int) const&) /home/lebedevri/rawspeed/build-Clang-SANITIZE/../src/librawspeed/common/Common.h:220
    #3 0x564ea1 in void rawspeed::unroll_loop<2ul, void rawspeed::LJpegDecompressor::decodeN<2, false>()::'lambda'(int)>(void rawspeed::LJpegDecompressor::decodeN<2, false>()::'lambda'(int) const&) /home/lebedevri/rawspeed/build-Clang-SANITIZE/../src/librawspeed/common/Common.h:235
    #4 0x564ea1 in void rawspeed::LJpegDecompressor::decodeN<2, false>() /home/lebedevri/rawspeed/build-Clang-SANITIZE/../src/librawspeed/decompressors/LJpegDecompressor.cpp:192
    #5 0x5602df in rawspeed::LJpegDecompressor::decodeScan() /home/lebedevri/rawspeed/build-Clang-SANITIZE/../src/librawspeed/decompressors/LJpegDecompressor.cpp:119:7
    #6 0x4d1904 in rawspeed::AbstractLJpegDecompressor::parseSOS(rawspeed::ByteStream) /home/lebedevri/rawspeed/build-Clang-SANITIZE/../src/librawspeed/decompressors/AbstractLJpegDecompressor.cpp:210:3
    #7 0x4ce011 in rawspeed::AbstractLJpegDecompressor::decode() /home/lebedevri/rawspeed/build-Clang-SANITIZE/../src/librawspeed/decompressors/AbstractLJpegDecompressor.cpp:101:7
    #8 0x55ea52 in rawspeed::LJpegDecompressor::decode(unsigned int, unsigned int, unsigned int, unsigned int, bool) /home/lebedevri/rawspeed/build-Clang-SANITIZE/../src/librawspeed/decompressors/LJpegDecompressor.cpp:80:30
    #9 0x53ef7d in void rawspeed::AbstractDngDecompressor::decompressThread<7>() const /home/lebedevri/rawspeed/build-Clang-SANITIZE/../src/librawspeed/decompressors/AbstractDngDecompressor.cpp:97:9
    #10 0x54281a in rawspeed::AbstractDngDecompressor::decompressThread() const /home/lebedevri/rawspeed/build-Clang-SANITIZE/../src/librawspeed/decompressors/AbstractDngDecompressor.cpp:173:5
    #11 0x542fab in .omp_outlined._debug__ /home/lebedevri/rawspeed/build-Clang-SANITIZE/../src/librawspeed/decompressors/AbstractDngDecompressor.cpp:203:3
    #12 0x542fab in .omp_outlined. /home/lebedevri/rawspeed/build-Clang-SANITIZE/../src/librawspeed/decompressors/AbstractDngDecompressor.cpp:203
    #13 0x7f654480c8a2 in __kmp_invoke_microtask (/usr/lib/x86_64-linux-gnu/libomp.so.5+0xac8a2)
    #14 0x7f654479fdbb in __kmp_fork_call (/usr/lib/x86_64-linux-gnu/libomp.so.5+0x3fdbb)
    #15 0x7f654478f61c in __kmpc_fork_call (/usr/lib/x86_64-linux-gnu/libomp.so.5+0x2f61c)
    #16 0x542d44 in rawspeed::AbstractDngDecompressor::decompress() const /home/lebedevri/rawspeed/build-Clang-SANITIZE/../src/librawspeed/decompressors/AbstractDngDecompressor.cpp:201:51
    #17 0x4f64a5 in rawspeed::DngDecoder::decodeData(rawspeed::TiffIFD const*, unsigned int) /home/lebedevri/rawspeed/build-Clang-SANITIZE/../src/librawspeed/decoders/DngDecoder.cpp:333:10
    #18 0x4f828c in rawspeed::DngDecoder::decodeRawInternal() /home/lebedevri/rawspeed/build-Clang-SANITIZE/../src/librawspeed/decoders/DngDecoder.cpp:415:3
    #19 0x5f5c3d in rawspeed::RawDecoder::decodeRaw() /home/lebedevri/rawspeed/build-Clang-SANITIZE/../src/librawspeed/decoders/RawDecoder.cpp:260:20
    #20 0x41bb24 in rawspeed::rstest::process(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rawspeed::CameraMetaData const*, rawspeed::rstest::options const&) /home/lebedevri/rawspeed/build-Clang-SANITIZE/../src/utilities/rstest/rstest.cpp:369:12
    #21 0x41ed7d in .omp_outlined._debug__ /home/lebedevri/rawspeed/build-Clang-SANITIZE/../src/utilities/rstest/rstest.cpp:535:17
    #22 0x41ed7d in .omp_outlined. /home/lebedevri/rawspeed/build-Clang-SANITIZE/../src/utilities/rstest/rstest.cpp:529
    #23 0x7f654480c8a2 in __kmp_invoke_microtask (/usr/lib/x86_64-linux-gnu/libomp.so.5+0xac8a2)
    #24 0x7f65447a6f82  (/usr/lib/x86_64-linux-gnu/libomp.so.5+0x46f82)
    #25 0x7f65447a5b44  (/usr/lib/x86_64-linux-gnu/libomp.so.5+0x45b44)
    #26 0x7f65447f9160  (/usr/lib/x86_64-linux-gnu/libomp.so.5+0x99160)
    #27 0x7f654473ffa2 in start_thread (/lib/x86_64-linux-gnu/libpthread.so.0+0x7fa2)
    #28 0x7f6543e514ce in clone (/lib/x86_64-linux-gnu/libc.so.6+0xf94ce)

SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../src/librawspeed/decompressors/LJpegDecompressor.cpp:193:27 in 
xargs: /home/lebedevri/rawspeed/build-Clang-SANITIZE/src/utilities/rstest/rstest: terminated by signal 6

KDRaw_Q360_20190310_125715_000001.dng.zip

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at line 193 of src/librawspeed/decompressors/LJpegDecompressor.cpp and reproduce the report with the supplied KDRaw_Q360_20190310_125715_000001.dng file using the sanitizer build and rstest. Done means the sample no longer triggers the UBSan implicit-conversion report or terminates rstest with signal 6.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
computer-vision
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.