#67658 closed defect (fixed)

svndigest @0.11: Segmentation fault

Reported by: ryandesign (Ryan Carsten Schmidt) Owned by: peter31042
Priority: Normal Milestone:
Component: ports Version: 2.8.1
Keywords: lion haspatch Cc:
Port: svndigest

Description (last modified by ryandesign (Ryan Carsten Schmidt))

svndigest @0.11 fails to build on Mac OS X 10.7.x only, because it tries to run each of the three executables during the build, and they crash:

https://build.macports.org/builders/ports-10.7_x86_64-builder/builds/148394/steps/install-port/logs/stdio

sh: line 1: 93257 Segmentation fault: 11  bin/svncopyright --help 2> /dev/null
help2man: can't get `--help' info from bin/svncopyright
Try `--no-discard-stderr' if option outputs to stderr
make[1]: *** [man/svncopyright.1] Error 139
make[1]: *** Waiting for unfinished jobs....
sh: line 1: 93256 Segmentation fault: 11  bin/svndigest-copy-cache --help 2> /dev/null
help2man: can't get `--help' info from bin/svndigest-copy-cache
Try `--no-discard-stderr' if option outputs to stderr
make[1]: *** [man/svndigest-copy-cache.1] Error 139
sh: line 1: 93255 Segmentation fault: 11  bin/svndigest --help 2> /dev/null
help2man: can't get `--help' info from bin/svndigest
Try `--no-discard-stderr' if option outputs to stderr
make[1]: *** [man/svndigest.1] Error 139

The crash logs show:

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   libc++.1.dylib                	0x0000000101433201 std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::sentry(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) + 19
1   svndigest                     	0x00000001011312f6 std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) + 38
2   svndigest                     	0x000000010113f1dc theplu::yat::utility::ColumnStream::print(std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >&) + 150
3   svndigest                     	0x0000000101140f74 theplu::yat::utility::ColumnStream& theplu::yat::utility::operator<< <std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(theplu::yat::utility::ColumnStream&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) + 88
4   svndigest                     	0x0000000101140e63 theplu::yat::utility::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, theplu::yat::utility::CommandLine const&) + 546
5   svndigest                     	0x0000000101143678 theplu::yat::utility::OptionHelp::do_parse2(std::__1::__wrap_iter<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*>, std::__1::__wrap_iter<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*>) + 264
6   svndigest                     	0x00000001011438d2 theplu::yat::utility::OptionSwitch::do_parse(std::__1::__wrap_iter<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*>&, std::__1::__wrap_iter<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*> const&) + 182
7   svndigest                     	0x0000000101140459 theplu::yat::utility::CommandLine::parse_long(std::__1::__wrap_iter<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*>&, std::__1::__wrap_iter<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*>&) + 435
8   svndigest                     	0x0000000101140216 theplu::yat::utility::CommandLine::parse(std::__1::__wrap_iter<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*>&, std::__1::__wrap_iter<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*>&) + 134
9   svndigest                     	0x000000010113fdbe theplu::yat::utility::CommandLine::parse(int, char**) + 684
10  svndigest                     	0x00000001010f6233 theplu::svndigest::AbstractParameter::parse(int, char**) + 39
11  svndigest                     	0x00000001010f8371 main + 49
12  svndigest                     	0x00000001010f5344 start + 52

Mac OS X 10.7 was the first version to include libc++. It's possible it has a bug that was fixed in later versions. The build succeeds on OS X 10.8 and later, and also on Mac OS X 10.6 on which we install our own newer libc++.

If this is a libc++ bug and not a bug in svndigest or yat, one solution that might work is to use the legacysupport portgroup and tell it to use a newer MacPorts libc++:

PortGroup legacysupport 1.1
legacysupport.newest_darwin_requires_legacy 11
legacysupport.use_mp_libcxx yes

If svndigest is passing around C++ objects between itself and its dependencies, this isn't a good idea, but if svndigest is only using C++ objects it created itself and doesn't share them with other libraries, this might be fine.

Attachments (3)

svncopyright_2023-06-20-073151_localhost.crash (22.2 KB) - added by ryandesign (Ryan Carsten Schmidt) 17 months ago.
svndigest_2023-06-20-073152_localhost.crash (42.0 KB) - added by ryandesign (Ryan Carsten Schmidt) 17 months ago.
svndigest-copy-cache_2023-06-20-073151_localhost.crash (22.3 KB) - added by ryandesign (Ryan Carsten Schmidt) 17 months ago.

Download all attachments as: .zip

Change History (9)

comment:1 Changed 17 months ago by ryandesign (Ryan Carsten Schmidt)

Owner: set to peter31042
Status: newassigned

comment:2 Changed 17 months ago by ryandesign (Ryan Carsten Schmidt)

Description: modified (diff)

Changed 17 months ago by ryandesign (Ryan Carsten Schmidt)

Changed 17 months ago by ryandesign (Ryan Carsten Schmidt)

Changed 17 months ago by ryandesign (Ryan Carsten Schmidt)

comment:3 Changed 17 months ago by peter31042

All dependencies are written in C except for plplot. svndigest creates a plstream object declared by plplot and calls its member functions, but does not pass it or any other object to other functionality in plplot. I'm not sure if that makes it safe to use different compilers for svndigest and plplot, if that's your question.

comment:4 Changed 17 months ago by ryandesign (Ryan Carsten Schmidt)

Using different compilers shouldn't matter as long as they use the same C++ standard library, and all clangs normally use the system's libc++. Trying to use two different C++ standard libraries in the same program is where things can start to fall apart, and I don't know if svndigest using a newer MacPorts libc++ will work when plplot is using the system's older libc++. At some point I will reboot to Lion and try it out.

comment:5 Changed 17 months ago by ryandesign (Ryan Carsten Schmidt)

Keywords: haspatch added

comment:6 Changed 17 months ago by ryandesign (Ryan Carsten Schmidt)

Resolution: fixed
Status: assignedclosed

In f6f04ceed1ca62213a23f69be97b35323cd0060d/macports-ports (master):

svndigest: Fix build on Lion; fix GitHub handle

Closes: #67658

Note: See TracTickets for help on using tickets.