nona segfaults with PNG and TIFF output

Bug #1467678 reported by Bruno Postle
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Hugin
Fix Released
Undecided
Unassigned

Bug Description

System: fedora f22 x86_64
hugin 2015.0.0 rc1 c48252eb571f
libtiff-4.0.3
libpng-1.6.16
libjpeg-turbo-1.4.0
vigra-1.10.0

I'm getting a segfault from nona with PNG and TIFF output, JPEG is fine.

This is a simple single image project with JPEG input:

  nona -i 0 -m TIFF -o junk project.pto
  Segmentation fault (core dumped)

Result is the same with or without -m parameter and with multiple photo projects.
OMP_NUM_THREADS=1 doesn't help. I don't have a suitable GPU so I can't test that.

Thread 1 (Thread 0x7f100c213900 (LWP 3761)):
#0 0x00007f100bbabbc8 in void vigra::detail::exportImage<vigra::Diff2D, vigra::MultiImageVectorMaskAccessor4<vigra::ConstBasicImageIterator<vigra::RGBValue<unsigned char, 0u, 1u, 2u>, vigra::RGBValue<unsigned char, 0u, 1u, 2u>**>, vigra::RGBAccessor<vigra::RGBValue<unsigned char, 0u, 1u, 2u> >, vigra::ConstBasicImageIterator<unsigned char, unsigned char**>, vigra::StandardConstValueAccessor<unsigned char> > >(vigra::Diff2D, vigra::Diff2D, vigra::MultiImageVectorMaskAccessor4<vigra::ConstBasicImageIterator<vigra::RGBValue<unsigned char, 0u, 1u, 2u>, vigra::RGBValue<unsigned char, 0u, 1u, 2u>**>, vigra::RGBAccessor<vigra::RGBValue<unsigned char, 0u, 1u, 2u> >, vigra::ConstBasicImageIterator<unsigned char, unsigned char**>, vigra::StandardConstValueAccessor<unsigned char> >, vigra::ImageExportInfo const&, vigra::VigraFalseType)
    () from /usr/lib64/hugin/libhuginbase.so.0.0
No symbol table info available.
#1 0x00007f100bb9760a in void vigra::exportImageAlpha<vigra::ConstBasicImageIterator<vigra::RGBValue<unsigned char, 0u, 1u, 2u>, vigra::RGBValue<unsigned char, 0u, 1u, 2u>**>, vigra::RGBAccessor<vigra::RGBValue<unsigned char, 0u, 1u, 2u> >, vigra::ConstBasicImageIterator<unsigned char, unsigned char**>, vigra::StandardConstValueAccessor<unsigned char> >(vigra::triple<vigra::ConstBasicImageIterator<vigra::RGBValue<unsigned char, 0u, 1u, 2u>, vigra::RGBValue<unsigned char, 0u, 1u, 2u>**>, vigra::ConstBasicImageIterator<vigra::RGBValue<unsigned char, 0u, 1u, 2u>, vigra::RGBValue<unsigned char, 0u, 1u, 2u>**>, vigra::RGBAccessor<vigra::RGBValue<unsigned char, 0u, 1u, 2u> > >, std::pair<vigra::ConstBasicImageIterator<unsigned char, unsigned char**>, vigra::StandardConstValueAccessor<unsigned char> >, vigra::ImageExportInfo const&, vigra::VigraFalseType) [clone .isra.915] [clone .constprop.1312] () from /usr/lib64/hugin/libhuginbase.so.0.0
No symbol table info available.
#2 0x00007f100bbbe152 in HuginBase::Nona::WeightedStitcher<vigra::BasicImage<vigra::RGBValue<unsigned char, 0u, 1u, 2u>, std::allocator<vigra::RGBValue<unsigned char, 0u, 1u, 2u> > >, vigra::BasicImage<unsigned char, std::allocator<unsigned char> > >::stitch(HuginBase::PanoramaOptions const&, std::set<unsigned int, std::less<unsigned int>, std::allocator<unsigned int> >&, std::string const&, HuginBase::Nona::SingleImageRemapper<vigra::BasicImage<vigra::RGBValue<unsigned char, 0u, 1u, 2u>, std::allocator<vigra::RGBValue<unsigned char, 0u, 1u, 2u> > >, vigra::BasicImage<unsigned char, std::allocator<unsigned char> > >&, std::map<std::string, std::string, std::less<std::string>, std::allocator<std::pair<std::string const, std::string> > > const&) () from /usr/lib64/hugin/libhuginbase.so.0.0
No symbol table info available.
#3 0x00007f100bb981e9 in HuginBase::Nona::stitchPanoRGB_8_16(HuginBase::PanoramaData const&, HuginBase::PanoramaOptions const&, AppBase::ProgressDisplay*, std::string const&, std::set<unsigned int, std::less<unsigned int>, std::allocator<unsigned int> > const&, char const*, std::map<std::string, std::string, std::less<std::string>, std::allocator<std::pair<std::string const, std::string> > > const&) ()
   from /usr/lib64/hugin/libhuginbase.so.0.0
No symbol table info available.
#4 0x00007f100bcd2c9a in HuginBase::Nona::stitchPanorama(HuginBase::PanoramaData const&, HuginBase::PanoramaOptions const&, AppBase::ProgressDisplay*, std::string const&, std::set<unsigned int, std::less<unsigned int>, std::allocator<unsigned int> > const&, std::map<std::string, std::string, std::less<std::string>, std::allocator<std::pair<std::string const, std::string> > > const&) ()
   from /usr/lib64/hugin/libhuginbase.so.0.0
No symbol table info available.
#5 0x00007f100b967c0e in HuginBase::NonaFileOutputStitcher::runStitcher() () from /usr/lib64/hugin/libhuginbase.so.0.0
No symbol table info available.
#6 0x0000000000404d27 in main ()
No symbol table info available.

I'll rebuild and try again with unstripped binaries.

Revision history for this message
Bruno Postle (brunopostle) wrote :
Download full text (14.3 KiB)

Here's a better stacktrace:

Core was generated by `nona -i 0 -m TIFF -o junk DSC_0251 - DSC_0254.pto'.
Program terminated with signal SIGSEGV, Segmentation fault.

Thread 1 (Thread 0x7ff2da3e5900 (LWP 11921)):
#0 operator() (v=@0x0: <error reading variable>, this=<synthetic pointer>) at /usr/include/vigra/inspectimage.hxx:1043
No locals.
#1 inspectLine<vigra::IteratorAdaptor<vigra::Diff2DConstRowIteratorPolicy<vigra::Diff2D> >, vigra::VectorElementAccessor<vigra::MultiImageVectorMaskAccessor4<vigra::ConstBasicImageIterator<vigra::RGBValue<unsigned char>, vigra::RGBValue<unsigned char>**>, vigra::RGBAccessor<vigra::RGBValue<unsigned char> >, vigra::ConstBasicImageIterator<unsigned char, unsigned char**>, vigra::StandardConstValueAccessor<unsigned char> > >, vigra::FindMinMax<unsigned char> > (f=<synthetic pointer>, send=..., s=..., src=...) at /usr/include/vigra/inspectimage.hxx:71
No locals.
#2 operator()<vigra::FindMinMax<unsigned char> > (f=<synthetic pointer>, this=<optimized out>) at /usr/include/vigra/inspectimage.hxx:225
        t = {x = <optimized out>, y = 0}
        w = 8536
#3 extra_passes_select<vigra::inspectImage_binder<vigra::Diff2D, vigra::VectorElementAccessor<vigra::MultiImageVectorMaskAccessor4<vigra::ConstBasicImageIterator<vigra::RGBValue<unsigned char>, vigra::RGBValue<unsigned char>**>, vigra::RGBAccessor<vigra::RGBValue<unsigned char> >, vigra::ConstBasicImageIterator<unsigned char, unsigned char**>, vigra::StandardConstValueAccessor<unsigned char> > > >, vigra::FindMinMax<unsigned char> > (f=<synthetic pointer>, g=...) at /usr/include/vigra/inspector_passes.hxx:71
No locals.
#4 inspectImage<vigra::Diff2D, vigra::VectorElementAccessor<vigra::MultiImageVectorMaskAccessor4<vigra::ConstBasicImageIterator<vigra::RGBValue<unsigned char>, vigra::RGBValue<unsigned char>**>, vigra::RGBAccessor<vigra::RGBValue<unsigned char> >, vigra::ConstBasicImageIterator<unsigned char, unsigned char**>, vigra::StandardConstValueAccessor<unsigned char> > >, vigra::FindMinMax<unsigned char> > (
    f=<synthetic pointer>, a=..., lowerright=..., upperleft=...) at /usr/include/vigra/inspectimage.hxx:236
No locals.
#5 find_value_range<vigra::Diff2D, vigra::MultiImageVectorMaskAccessor4<vigra::ConstBasicImageIterator<vigra::RGBValue<unsigned char>, vigra::RGBValue<unsigned char>**>, vigra::RGBAccessor<vigra::RGBValue<unsigned char> >, vigra::ConstBasicImageIterator<unsigned char, unsigned char**>, vigra::StandardConstValueAccessor<unsigned char> > > (lower_right=..., upper_left=..., accessor=...)
    at /usr/include/vigra/impexbase.hxx:164
        i = 0
        extrema = {min = 255 '\377', max = 0 '\000', count = 0}
#6 find_source_value_range<vigra::Diff2D, vigra::MultiImageVectorMaskAccessor4<vigra::ConstBasicImageIterator<vigra::RGBValue<unsigned char>, vigra::RGBValue<unsigned char>**>, vigra::RGBAccessor<vigra::RGBValue<unsigned char> >, vigra::ConstBasicImageIterator<unsigned char, unsigned char**>, vigra::StandardConstValueAccessor<unsigned char> > > (lower_right=..., upper_left=..., export_info=..., accessor=...)
    at /usr/include/vigra/impexbase.hxx:185
        range = <optimized out>
#7 vigra::detail::exportImage<vigra::Diff2D, ...

Revision history for this message
tmodes (tmodes) wrote :

I can't reproduce the issue. It works for be.
Nevertheless I have an idea. Please test if changeset 5f45958ae420 fixes your issue. If so we need to graft the changeset to 2015.0 branch.

Revision history for this message
Bruno Postle (brunopostle) wrote :

Thanks, that works.

The current 2015.0 branch (dc7eb38fe1d5) patched with 5f45958ae420 now renders TIFF without crashing.

(this is a 2015.0 bug. 2014.0 is fine, I even rebuilt it to be sure there is no problem with the build environment. All this is with the same vigra impex 1.10.0 library)

Revision history for this message
tmodes (tmodes) wrote :

Ok, grafted to 2015.0 branch.

2014.0 is using an internal vigra (very old version). So you did not see the bug. Pablos old implementation does not work with the newer vigra version. So Hugin is now using slightly modified impexalpha.hxx from vigra directly (written by Chris Spiel).

Changed in hugin:
status: New → Fix Committed
Revision history for this message
tmodes (tmodes) wrote :

Hi Bruno,

during testing I found some more bugs in the alpha channel handling, which only occurs in some special cases. Nevertheless I tried to fix them. This requires a touch up of some more code in changeset 13f7aeff8000
Could you please test that I did not break something what already worked?

tmodes (tmodes)
Changed in hugin:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.