Crash after selecting a *certain* directory

Issue #274 resolved
Paul Matthijsse created an issue

Hello, the following has happened several times, no clue why or how to resolve.

I’m editing a photo in a certain directory and ART crashes (very rare but sometimes this happens). I restart ART and go back to that dir in the Navigator > ART freezes. So I made a debug build to see what happens, below is the output: segfault. When I restart ART from the command line it outputs a glibmm error, see below, below.

I cleared the cache from within ART, that changes nothing. I renamed ./cache/ART to .cache/ART.off, but nothing changes either. Any idea what’s going on here?

When working in any other directory ART behaves normal. The “problematic” directory has a “normal” name (no spaces or special chars), as have the files in it.

paul@graveyron:~$ gdb ART
GNU gdb (Ubuntu 9.2-0ubuntu1~20.04.1) 9.2
[…]

This GDB was configured as "x86_64-linux-gnu".
Reading symbols from ART...
(gdb) run
Starting program: /usr/local/bin/ART
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7ffff0e09700 (LWP 5029)]
[some more threads… and then:]

(ART:5025): GLib-CRITICAL **: 16:15:38.401: g_date_time_get_ymd: assertion 'datetime != NULL' failed

(ART:5025): GLib-CRITICAL **: 16:15:38.401: g_date_time_get_hour: assertion 'datetime != NULL' failed

(ART:5025): GLib-CRITICAL **: 16:15:38.401: g_date_time_get_minute: assertion 'datetime != NULL' failed

(ART:5025): GLib-CRITICAL **: 16:15:38.401: g_date_time_get_second: assertion 'datetime != NULL' failed

Thread 4 "ART" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffefe07700 (LWP 5031)]
0x00007ffff758b668 in g_date_time_to_unix ()
from /lib/x86_64-linux-gnu/libglib-2.0.so.0
(gdb) quit
A debugging session is active.

Inferior 1 [process 5025] will be killed.

Quit anyway? (y or n) y
paul@graveyron:~$ art

(art:5127): glibmm-ERROR **: 16:20:19.111:
unhandled exception (type std::exception) in signal handler:
what: vector::_M_range_check: __n (which is 2) >= this->size() (which is 2)

Traceer/breekpunt-instructie
paul@graveyron:~$

Comments (11)

  1. agriggio repo owner

    hi,

    Can you please provide a backtrace? (See rawpedia).

    Also, this is most likely caused by one specific image and arp sidecar. If you can isolate the problem and attach the offending files, that would also be great (but maybe a backtrace is enough)

    Thanks for reporting!

  2. Paul Matthijsse reporter

    (gdb) backtrace
    #0 0x00007ffff758b668 in g_date_time_to_unix ()
    at /lib/x86_64-linux-gnu/libglib-2.0.so.0
    #1 0x00005555562d7aa1 in rtengine::FramesData::FramesData(Glib::ustring const&) (this=0x7fffbc00cda0, fname=...)
    at /home/paul/apps/art/rtengine/imagedata.cc:319
    #2 0x00005555562d543b in rtengine::FramesMetaData::fromFile(Glib::ustring const&) (fname=...) at /home/paul/apps/art/rtengine/imagedata.cc:60
    #3 0x0000555556135cb6 in Thumbnail::getMetaData() (this=0x7fffbc0143d0)
    at /home/paul/apps/art/rtgui/thumbnail.cc:1283
    #4 0x0000555556134fdf in Thumbnail::loadRating() (this=0x7fffbc0143d0)
    at /home/paul/apps/art/rtgui/thumbnail.cc:1200
    #5 0x0000555556130bd9 in Thumbnail::loadProcParams(bool)
    (this=0x7fffbc0143d0, load_rating=true)
    at /home/paul/apps/art/rtgui/thumbnail.cc:404
    #6 0x000055555612e154 in Thumbnail::Thumbnail(CacheManager*, Glib::ustring const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
    (this=0x7fffbc0143d0, cm=0x555556a7b3a0 CacheManager::getInstance()::instance, fname=..., md5="9301e09283ee1b34558cf8a9622c8551")
    at /home/paul/apps/art/rtgui/thumbnail.cc:67
    #7 0x0000555555d7d566 in CacheManager::getEntry(Glib::ustring const&)
    (this=0x555556a7b3a0 CacheManager::getInstance()::instance, fname=...)
    at /home/paul/apps/art/rtgui/cachemanager.cc:124
    --Type <RET> for more, q to quit, c to continue without paging--
    #8 0x000055555608c221 in PreviewLoader::Impl::processNextJob()
    (this=0x55555770e890) at /home/paul/apps/art/rtgui/previewloader.cc:112
    #9 0x0000555556091365 in sigc::bound_mem_functor0<void, PreviewLoader::Impl>::operator()() const (this=0x5555576fb9d8)
    at /usr/include/sigc++-2.0/sigc++/functors/mem_fun.h:1991
    #10 0x00005555560912fa in std::__invoke_impl<void, sigc::bound_mem_functor0<void, PreviewLoader::Impl>&>(std::__invoke_other, sigc::bound_mem_functor0<void, PreviewLoader::Impl>&) (__f=...) at /usr/include/c++/9/bits/invoke.h:60
    #11 0x00005555560912bf in std::__invoke<sigc::bound_mem_functor0<void, PreviewLoader::Impl>&>(sigc::bound_mem_functor0<void, PreviewLoader::Impl>&) (__fn=...)
    at /usr/include/c++/9/bits/invoke.h:95
    #12 0x00005555560911ec in std::_Bind<sigc::bound_mem_functor0<void, PreviewLoader::Impl> ()>::__call<void>(std::tuple<>&&, std::_Index_tuple<>)
    (this=0x5555576fb9d8, __args=...) at /usr/include/c++/9/functional:400
    #13 0x0000555556090d95 in std::_Bind<sigc::bound_mem_functor0<void, PreviewLoader::Impl> ()>::operator()<, void>() (this=0x5555576fb9d8)
    at /usr/include/c++/9/functional:484
    #14 0x00005555560909e7 in std::__invoke_impl<void, std::_Bind<sigc::bound_mem_functor0<void, PreviewLoader::Impl> ()>&>(std::__invoke_other, std::_Bind<sigc::bound_mem_functor0<void, PreviewLoader::Impl> ()>&) (__f=...)
    at /usr/include/c++/9/bits/invoke.h:60
    #15 0x0000555556090769 in std::__invoke<std::_Bind<sigc::bound_mem_functor0<void, PreviewLoader::Impl> ()>&>(std::_Bind<sigc::bound_mem_functor0<void, PreviewLoader::Impl> ()>&) (__fn=...) at /usr/include/c++/9/bits/invoke.h:95
    #16 0x00005555560904a3 in std::__future_base::_Task_state<std::_Bind<sigc::bound_mem_functor0<void, PreviewLoader::Impl> ()>, std::allocator<int>, void ()>::_M_run()::{lambda()#1}::operator()() const (this=0x7fffefe062c8)
    at /usr/include/c++/9/future:1421
    #17 0x0000555556090e64 in std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<sigc::bound_mem_functor0<void, PreviewLoader::Impl> ()>, std::allocator<int>, void ()>::_M_run()::{lambda()#1}, void>::operator()() const (this=0x7fffefe062d0) at /usr/include/c++/9/future:1362
    #18 0x0000555556090aa8 in std::_Function_handler<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> (), std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<sigc::bound_mem_functor0<void, PreviewLoader::Impl> ()>, std::allocator<int>, void ()>::_M_run()::{lambda()#1}, void> >::_M_invoke(std::_Any_data const&)
    (__functor=...) at /usr/include/c++/9/bits/std_function.h:286
    #19 0x0000555555d70278 in std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>::operator()() const
    (this=0x7fffefe062d0) at /usr/include/c++/9/bits/std_function.h:688
    #20 0x0000555555d6f9e6 in std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool)
    (this=0x5555576fb9b0, __f=0x7fffefe062d0, __did_set=0x7fffefe0622f)
    at /usr/include/c++/9/future:561
    #21 0x0000555555d71d89 in std::__invoke_impl<void, void (std::__future_base::_State_baseV2::)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool>(std::__invoke_memfun_deref, void (std::__future_base::_State_baseV2::&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>--Type <RET> for more, q to quit, c to continue without paging--
    &&, bool&&) (__f=
    @0x7fffefe06270: (void (std::__future_base::_State_baseV2::)(class std::__future_base::_State_baseV2 * const, class std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>()> , bool )) 0x555555d6f9ac <std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool)>, __t=@0x7fffefe06240: 0x5555576fb9b0)
    at /usr/include/c++/9/bits/invoke.h:73
    #22 0x0000555555d70c3a in std::__invoke<void (std::__future_base::_State_baseV2::)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool>(void (std::__future_base::_State_baseV2::&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>&&, bool&&) (__fn=
    @0x7fffefe06270: (void (std::__future_base::_State_baseV2::)(class std::__future_base::_State_baseV2 * const, class std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>()> , bool )) 0x555555d6f9ac <std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool)>) at /usr/include/c++/9/bits/invoke.h:95
    #23 0x0000555555d6fe78 in std::call_once<void (std::__future_base::_State_baseV2::)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool>(std::once_flag&, void (std::__future_base::_State_baseV2::&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>&&, bool&&)::{lambda()#1}::operator()() const (this=0x7fffefe061c0) at /usr/include/c++/9/mutex:671
    #24 0x0000555555d6fea7 in std::call_once<void (std::__future_base::_State_baseV2::)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool>(std::once_flag&, void (std::__future_base::_State_baseV2::&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>&&, bool&&)::{lambda()#2}::operator()() const (this=0x0) at /usr/include/c++/9/mutex:676
    #25 0x0000555555d6febc in std::call_once<void (std::__future_base::_State_baseV2::)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool>(std::once_flag&, void (std::__future_base::_State_baseV2::&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>&&, bool&&)::{lambda()#2}::_FUN() () at /usr/include/c++/9/mutex:676
    #26 0x00007ffff57fa4df in __pthread_once_slow
    (once_control=0x5555576fb9c8, init_routine=0x7ffff593ec20 <__once_proxy>)
    at pthread_once.c:116
    #27 0x0000555555d6eed8 in __gthread_once(__gthread_once_t*, void ()())
    --Type <RET> for more, q to quit, c to continue without paging--
    (__once=0x5555576fb9c8, __func=0x7ffff593ec20 <__once_proxy>)
    at /usr/include/x86_64-linux-gnu/c++/9/bits/gthr-default.h:700
    #28 0x0000555555d6ff66 in std::call_once<void (std::__future_base::_State_baseV2::)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool>(std::once_flag&, void (std::__future_base::_State_baseV2::&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>&&, bool&&)
    (__once=..., __f=
    @0x7fffefe06270: (void (std::__future_base::_State_baseV2::*)(class std::__future_base::_State_baseV2 * const, class std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>()> , bool )) 0x555555d6f9ac <std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool)>) at /usr/include/c++/9/mutex:683
    #29 0x0000555555d6f54d in std::__future_base::_State_baseV2::_M_set_result(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool)
    (this=0x5555576fb9b0, __res=..., __ignore_failure=false)
    at /usr/include/c++/9/future:401
    #30 0x0000555556090515 in std::__future_base::_Task_state<std::_Bind<sigc::bound_mem_functor0<void, PreviewLoader::Impl> ()>, std::allocator<int>, void ()>::_M_run() (this=0x5555576fb9b0) at /usr/include/c++/9/future:1423
    #31 0x0000555555db9ed1 in std::packaged_task<void ()>::operator()()
    (this=0x55555787d000) at /usr/include/c++/9/future:1551
    #32 0x000055555608d01f in rtengine::ThreadPool::enqueue<sigc::bound_mem_functor0<void, PreviewLoader::Impl>&>(rtengine::ThreadPool::Priority, sigc::bound_mem_functor0<void, PreviewLoader::Impl>&)::{lambda()#1}::operator()() const
    (this=0x55555787fa00)
    at /home/paul/apps/art/rtgui/../rtengine/threadpool.h:159
    #33 0x000055555608f50e in std::_Function_handler<void (), rtengine::ThreadPool::enqueue<sigc::bound_mem_functor0<void, PreviewLoader::Impl>&>(rtengine::ThreadPool::Priority, sigc::bound_mem_functor0<void, PreviewLoader::Impl>&)::{lambda()#1}>::_M_invoke(std::_Any_data const&) (__functor=...)
    at /usr/include/c++/9/bits/std_function.h:300
    #34 0x000055555630d178 in std::function<void ()>::operator()() const
    (this=0x7fffb800e170) at /usr/include/c++/9/bits/std_function.h:688
    #35 0x000055555630e0d2 in std::_Function_handler<void (), rtengine::ThreadPool::Task>::_M_invoke(std::_Any_data const&) (__functor=...)
    at /usr/include/c++/9/bits/std_function.h:300
    #36 0x000055555630d178 in std::function<void ()>::operator()() const
    (this=0x7fffefe06410) at /usr/include/c++/9/bits/std_function.h:688
    #37 0x000055555630c9c0 in rtengine::ThreadPool::ThreadPool(unsigned long)::{lambda()#1}::operator()() const (__closure=0x555556b02568)
    at /home/paul/apps/art/rtengine/threadpool.h:131
    #38 0x000055555630f789 in std::__invoke_impl<void, rtengine::ThreadPool::ThreadPool(unsigned long)::{lambda()#1}>(std::__invoke_other, rtengine::ThreadPool::ThreadPool(unsigned long)::{lambda()#1}&&) (__f=...)
    at /usr/include/c++/9/bits/invoke.h:60
    #39 0x000055555630f71e in std::__invoke<rtengine::ThreadPool::ThreadPool(unsigned long)::{lambda()#1}>(std::__invoke_result&&, (rtengine::ThreadPool::ThreadPool(unsigned long)::{lambda()#1}&&)...) (__fn=...)
    at /usr/include/c++/9/bits/invoke.h:95
    #40 0x000055555630f6b0 in std::thread::_Invoker<std::tuple<rtengine::ThreadPool:--Type <RET> for more, q to quit, c to continue without paging--
    :ThreadPool(unsigned long)::{lambda()#1}> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) (this=0x555556b02568) at /usr/include/c++/9/thread:244
    #41 0x000055555630f66d in std::thread::_Invoker<std::tuple<rtengine::ThreadPool::ThreadPool(unsigned long)::{lambda()#1}> >::operator()() (this=0x555556b02568)
    at /usr/include/c++/9/thread:251
    #42 0x000055555630f63e in std::thread::_State_impl<std::thread::_Invoker<std::tuple<rtengine::ThreadPool::ThreadPool(unsigned long)::{lambda()#1}> > >::_M_run() (this=0x555556b02560) at /usr/include/c++/9/thread:195
    #43 0x00007ffff593fde4 in () at /lib/x86_64-linux-gnu/libstdc++.so.6
    #44 0x00007ffff57f1609 in start_thread (arg=<optimized out>)
    at pthread_create.c:477
    #45 0x00007ffff5714133 in clone ()
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
    (gdb)

  3. agriggio repo owner

    thanks. From there, in gdb, you can type the following:

    (gdb) up
    (gdb) print fname
    

    this should show the offending file. Then you can maybe upload it together with the arp so I can understand what is going on. Thanks!

  4. Paul Matthijsse reporter

    Hello,

    (gdb) up
    #1 0x00005555562d7aa1 in rtengine::FramesData::FramesData (
    this=0x7fffc40079b0, fname=...)
    at /home/paul/apps/art/rtengine/imagedata.cc:319
    319 timeStamp = d.to_unix();
    (gdb) print fname
    \$1 = (const Glib::ustring &) @0x7fffc4005520: {
    static npos = 18446744073709551615,
    string_ = "/home/paul/bozart22/commandes/sandrine_dec22/index2_3xup.jpg"}
    (gdb)

    There’s no arp file, I deleted all of them to find out what happened…

  5. Paul Matthijsse reporter

    Hi Alberto, I moved all the files from named directory and re-added them one by one. ART crashes on the following file, it was edited in ART and has no arp file because I deleted them all to find out what happened… Still don’t understand what’s going on…

  6. Paul Matthijsse reporter

    Hmm, if I rename the first offending file to index2_3xup.jpg.off, the crash does not happen…

  7. Paul Matthijsse reporter

    Hi Alberto, I did some more testing. I copied the two original files above (original means: not edited in ART yet) to a new folder. I start ART in debug mode, navigate to that dir and open the second photo, the young lady with her mother. I use the tone equalizer to balance the tones, I save the file, everything ok. I open the other photo, the first one, do the same kind of editing and save. Then I see the following debug msg.

    [Thread 0x7fffa6ffd700 (LWP 17884) exited]
    [Thread 0x7fffa4ff9700 (LWP 17882) exited]
    [New Thread 0x7fffa4ff9700 (LWP 17886)]
    [Thread 0x7fffa5ffb700 (LWP 17883) exited]
    [Detaching after fork from child process 17892]
    [Detaching after fork from child process 17893]
    /home/paul/Bureaublad/test/IMG_20220606_102107-1.jpg: Empty input file
    /home/paul/Bureaublad/test/IMG_20220606_102107-1.jpg: Empty input file
    [Thread 0x7fffa4ff9700 (LWP 17886) exited]

    The Navigator shows only 3 images BUT the file has been saved and is readable in gThumb and Geeqie. Only thing: in both applications the thumbnails of the processed photos are corrupted (see attachment), but the files show up fine. Hitting F5 to refresh the Navigator leads to a crash.

    Any ideas?

  8. Paul Matthijsse reporter

    Hello Alberto, some more info. I start ART in debug mode, I open the original photo of the young girl, set Tone Equalizer - Midtones to +65. An arp file is produced. Now I save the photo, the lines “Empty input file” appear again, the Navigator shows two photos instead of three (should be two originals and one saved), although the file is saved, again with corrupted thumbnail. There are differences between the jpg.arp and the jpg.out.arp, a diff produces the following output:

    125c125

    < DeconvAutoRadius=true

    DeconvAutoRadius=false
    134,135c134,135
    < Temperature=6504
    < Green=1


    Temperature=6490
    Green=1.002
    137c137
    < Multipliers=1;1;1;


    Multipliers=0.99990000000000001;1;0.99990000000000001;
    234c234
    < Enabled=false


    Enabled=true
    237c237
    < Band2=0


    Band2=65
    247,248c247,248
    < W=15000
    < H=15000


    W=3001
    H=4001
    287,288c287,288
    < FocalLength=0
    < CropFactor=1


    FocalLength=3.8999999999999999
    CropFactor=6.0899999999999999
    323c323
    < Scale=1


    Scale=0.23000000000000001
    348c348
    < InputProfile=(cameraICC)


    InputProfile=(embedded)
    589c589
    < RefOutput=0;0;0;


    RefOutput=2739.8720703125;2739.755859375;2740.07568359375;
    593c593
    < ExifKeys=Exif.Image.Copyright;Exif.Image.Artist;Exif.Image.ImageDescription;Exif.Photo.UserComment;Exif.Image.Make;Exif.Image.Model;Exif.Photo.LensModel;Exif.Photo.FNumber;Exif.Photo.ExposureTime;Exif.Photo.FocalLength;Exif.Photo.ISOSpeedRatings;Exif.Photo.ExposureBiasValue;Exif.Photo.Flash;Exif.Photo.DateTimeOriginal;Exif.Image.XResolution;Exif.Image.YResolution;


    ExifKeys=Exif.Image.Artist;Exif.Image.Copyright;Exif.Image.ImageDescription;Exif.Image.Make;Exif.Image.Model;Exif.Image.XResolution;Exif.Image.YResolution;Exif.Photo.DateTimeOriginal;Exif.Photo.ExposureBiasValue;Exif.Photo.ExposureTime;Exif.Photo.FNumber;Exif.Photo.Flash;Exif.Photo.FocalLength;Exif.Photo.ISOSpeedRatings;Exif.Photo.LensModel;Exif.Photo.UserComment;

  9. agriggio repo owner

    Hi,

    I think you are conflating different problems here. The original problem was a segfault when reading a certain file. I can reproduce it with the first jpg you attached. So let’s keep this issue to that.

    If you experience file corruption problems, please open a different issue, thanks!

  10. Log in to comment