[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#831809: marked as done (g++-5: exceptions thrown from callback with va_list not caugth on at least armhf and powerpc)



Your message dated Wed, 23 Jan 2019 10:00:21 +0000
with message-id <E1gmFKX-000B2o-7A@fasolo.debian.org>
and subject line Bug#920166: Removed package(s) from unstable
has caused the Debian Bug report #831809,
regarding g++-5: exceptions thrown from callback with va_list not caugth on at least armhf and powerpc
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
831809: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=831809
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: g++-5
Version: 5.4.0-6
Severity: important
Tags: upstream

Dear Maintainer,

in the attached program the exception is not caught on armhf and powerpc.

The compilation command line is

  g++ test_tiff_throw.cc -o test-tiff-throw -ltiff

I've tested the compilers:

powerpc:

  g++ (Debian 5.4.0-6) 5.4.0 20160609
  g++-6 (Debian 6.1.1-9) 6.1.1 20160705

armhf:
  g++ (Ubuntu/Linaro 5.3.1-14ubuntu2.1) 5.3.1 20160413

and optimization levels -O0, -O1, and -O2.

In each case the program aborts with

   terminate called after throwing an instance of 'std::runtime_error'
     what():  should_not_exists.tif: No such file or directory
   Aborted

The code works as expected on amd64 with:

  g++ (Debian 5.4.0-6) 5.4.0 20160609
  g++ (Gentoo 5.4.0 p1.0, pie-0.6.5) 5.4.0

and i386:
  g++ (Debian 5.4.0-6) 5.4.0 20160609

In this case the program prints:

  "error: should_not_exists.tif: No such file or directory"

I was not able to create a simpler test case. Specifically:

Normally throw-catch works fine, i.e. the exception is caught even when using a
callback funtion that makes use of the va_list based constructs, but everything
resides in the same translation unit. The only way I can get this error
reproducible is by using libtiff that internally uses the va_* constructs to
forwards the error function to the user supplied function.

Tested libtiff5-dev:
   4.0.6-2 (powerpc, amd64)
   4.0.6-1 (armhf, i386)

Best regards,
Gert










-- System Information:
Debian Release: stretch/sid
  APT prefers unstable-debug
  APT policy: (500, 'unstable-debug'), (500, 'unstable'), (500, 'testing'), (1, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.6.0-1-amd64 (SMP w/2 CPU cores)
Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages g++-5 depends on:
ii  gcc-5            5.4.0-6
ii  gcc-5-base       5.4.0-6
ii  libc6            2.23-1
ii  libgmp10         2:6.1.1+dfsg-1
ii  libisl15         0.17.1-1
ii  libmpc3          1.0.3-1
ii  libmpfr4         3.1.4-2
ii  libstdc++-5-dev  5.4.0-6
ii  zlib1g           1:1.2.8.dfsg-2+b1

g++-5 recommends no packages.

Versions of packages g++-5 suggests:
pn  g++-5-multilib    <none>
pn  gcc-5-doc         <none>
pn  libstdc++6-5-dbg  <none>

-- no debconf information
#include <tiffio.h>
#include <exception>
#include <iostream>

typedef TIFF * PTIFF;
void MyErrorHandler(const char *module, const char *fmt,  va_list ap)
{
	char buf[16384];

	vsnprintf(buf,16384, fmt, ap);
	throw std::runtime_error(buf);
}

struct CErrorHandlerReplacer {
	CErrorHandlerReplacer():
		m_old_handler(TIFFSetErrorHandler(MyErrorHandler))
	{
	}
	~CErrorHandlerReplacer() {
		TIFFSetErrorHandler(m_old_handler);
	}
private:
	TIFFErrorHandler m_old_handler;
};


struct CTiffFile {
	CTiffFile(const char *name, const char *flags):
		handle(TIFFOpen(name, flags))
	{
	}

	~CTiffFile()
	{
		if (handle)
			TIFFClose(handle);
	}
	operator PTIFF() {
		return handle;
	}
private:
	TIFF *handle;
};

int main(int argc, char **args)
{
	CErrorHandlerReplacer error_replace;

	try {
		CTiffFile tif("should_not_exists.tif", "r");
		if (tif) {
			std::cerr << "File 'should_not_exists.tif' existed\n"; 
		}
		
	}catch (const std::runtime_error& x) {
		std::cerr << "error: " << x.what() << "\n"; 
	}

	return 0; 
}


--- End Message ---
--- Begin Message ---
Version: 5.5.0-12+rm

Dear submitter,

as the package gcc-5 has just been removed from the Debian archive
unstable we hereby close the associated bug reports.  We are sorry
that we couldn't deal with your issue properly.

For details on the removal, please see https://bugs.debian.org/920166

The version of this package that was in Debian prior to this removal
can still be found using http://snapshot.debian.org/.

This message was generated automatically; if you believe that there is
a problem with it please contact the archive administrators by mailing
ftpmaster@ftp-master.debian.org.

Debian distribution maintenance software
pp.
Scott Kitterman (the ftpmaster behind the curtain)

--- End Message ---

Reply to: