Aleph-One-Marathon / alephone

Aleph One is the open source continuation of Bungie’s Marathon 2 game engine.
https://alephone.lhowon.org/
GNU General Public License v3.0
621 stars 100 forks source link

Crash to desktop on Linux when entering the second map of Pfh'Joueur #480

Closed Ismail-Smile closed 2 months ago

Ismail-Smile commented 2 months ago

Going to the second map of Pfh'Joueur (from here https://simplici7y.com/items/pfh-joueur-a1-unimap-3/) titled Mera'Tahara, either by completing map 1 or by CTRL+SHIFT warping to it crashes to desktop with the following error message in the terminal:

/usr/include/c++/13.2.1/bits/stl_vector.h:1125: std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::operator[](size_type) [with _Tp = SoundHeader; _Alloc = std::allocator<SoundHeader>; reference = SoundHeader&; size_type = long unsigned int]: Assertion '__n < this->size()' failed. fish: Job 1, 'alephone .' terminated by signal SIGABRT (Abort)

The crash happens after the map intro image fades out. Tried on a fully updated Manjaro. This is the info that Aleph One prints on start:

Aleph One Linux 2023-11-25 1.7
https://alephone.lhowon.org/

Original code by Bungie Software <http://www.bungie.com/>
Additional work by Loren Petrich, Chris Pruett, Rhys Hill et al.
TCP/IP networking by Woody Zenfell
SDL port by Christian Bauer <Christian.Bauer@uni-mainz.de>

This is free software with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
For details, see the file COPYING.

Built with network play enabled.

Built with Lua scripting enabled.
GL_VENDOR: NVIDIA Corporation
GL_RENDERER: NVIDIA GeForce RTX 3080 Ti/PCIe/SSE2
GL_VERSION: 4.6.0 NVIDIA 550.67
treellama commented 2 months ago

Nothing to do with this bug, but that upload (like many Simplici7y files) is inauthentic. Check out the version at https://citadel.lhowon.org/ which uses a more modern automated tool to port the originals.

Ismail-Smile commented 2 months ago

I didn't know of Citadel, thanks!

treellama commented 2 months ago

I'm not able to reproduce this issue with the citadel.lhowon.org port, for what it's worth

Ismail-Smile commented 2 months ago

Just tried it with the version from Citadel and it crashes in the exact same way for me. Maybe it's fixed with AO 1.7.1? I'm using 1.7

/usr/include/c++/13.2.1/bits/stl_vector.h:1125: std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::operator[](size_type) [with _Tp = SoundHeader; _Alloc = std::allocator<SoundHeader>; reference = SoundHeader&; size_type = long unsigned int]: Assertion '__n < this->size()' failed.

treellama commented 2 months ago

I tried it with 1.7, 1.7.1., and git. All worked fine. Can you post the output of ./configure? Maybe we have a different set of options enabled.

Ismail-Smile commented 2 months ago

This is what .configure outputs for me. For what it's worth I'm compiling with an AUR build script. I also attach it at the end.

checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking target system type... x86_64-pc-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a race-free mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether the compiler supports GNU C... yes
checking whether gcc accepts -g... yes
checking for gcc option to enable C11 features... none needed
checking whether gcc understands -c and -o together... yes
checking whether make supports the include directive... yes (GNU style)
checking dependency style of gcc... gcc3
checking how to run the C preprocessor... gcc -E
checking for g++... g++
checking whether the compiler supports GNU C++... yes
checking whether g++ accepts -g... yes
checking for g++ option to enable C++11 features... none needed
checking dependency style of g++... gcc3
checking how to run the C++ preprocessor... g++ -E
checking for g++... g++
checking whether the compiler supports GNU Objective C++... no
checking whether g++ accepts -g... no
checking dependency style of g++... gcc3
checking for ranlib... ranlib
checking whether g++ supports C++17 features by default... yes
checking for stdio.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for strings.h... yes
checking for sys/stat.h... yes
checking for sys/types.h... yes
checking for unistd.h... yes
checking for unistd.h... (cached) yes
checking for pwd.h... yes
checking for boostlib >= 1.65.0 (106500)... yes
checking whether the Boost::System library is available... yes
checking for exit in -lboost_system... yes
checking whether the Boost::Filesystem library is available... yes
checking for exit in -lboost_filesystem... yes
checking for boost/tokenizer.hpp... yes
checking for boost/unordered_map.hpp... yes
checking for boost/algorithm/string/predicate.hpp... yes
checking for boost/iostreams/stream_buffer.hpp... yes
checking for boost/property_tree/xml_parser.hpp... yes
checking for boost/uuid/uuid.hpp... yes
checking for snprintf... yes
checking for vsnprintf... yes
checking for sysconf... yes
checking for sysctlbyname... no
checking for mkstemp... yes
checking for library containing gethostbyname... none required
checking for library containing socket... none required
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for sdl2 >= 2.0.2... yes
checking for SDL2_ttf... yes
checking for SDL2_net... yes
checking for zlib... yes
checking for sndfile... yes
checking for openal >= 1.14.0... yes
checking for OpenGL support... yes
checking for gluScaleImage in -lGLU... yes
checking for GL/glext.h... yes
checking for SDL2_image... yes
checking for libavcodec >= 54.35.0 libavformat >= 54.20.0 libavutil >= 52.3.0 libswscale >= 2.1.1 libswresample >= 3.0.0 ... yes
checking for smpeg/smpeg.h... no
checking for libcurl >= 7.31.0... yes
checking for zziplib >= 0.10.75... yes
checking for libpng... yes
checking for miniupnpc/miniupnpc.h... no
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating AlephOne.spec
config.status: creating Source_Files/Makefile
config.status: creating Source_Files/CSeries/Makefile
config.status: creating Source_Files/FFmpeg/Makefile
config.status: creating Source_Files/Files/Makefile
config.status: creating Source_Files/GameWorld/Makefile
config.status: creating Source_Files/Input/Makefile
config.status: creating Source_Files/Lua/Makefile
config.status: creating Source_Files/Misc/Makefile
config.status: creating Source_Files/ModelView/Makefile
config.status: creating Source_Files/Network/Makefile
config.status: creating Source_Files/Network/Metaserver/Makefile
config.status: creating Source_Files/RenderMain/Makefile
config.status: creating Source_Files/RenderOther/Makefile
config.status: creating Source_Files/Sound/Makefile
config.status: creating Source_Files/TCPMess/Makefile
config.status: creating Source_Files/XML/Makefile
config.status: creating tools/Makefile
config.status: creating tools/headertest/GNUmakefile
config.status: creating data/Makefile
config.status: creating data/default_theme/Makefile
config.status: creating data/icons/Makefile
config.status: creating config.h
config.status: executing depfiles commands

Compilation settings:

    CC: gcc
    CXX: g++
    CPP: gcc -E
    CFLAGS: -march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions         -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security         -fstack-clash-protection -fcf-protection -flto=auto
    CXXFLAGS: -march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions         -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security         -fstack-clash-protection -fcf-protection -Wp,-D_GLIBCXX_ASSERTIONS -flto=auto
    CPPFLAGS: -I/usr/include/libpng16   -I/usr/include/ffmpeg4.4 -I/usr/include/SDL2 -D_REENTRANT -I/usr/include/libpng16 -DHWY_SHARED_DEFINE -DAVIF_DLL -I/usr/include/webp -I/usr/include/AL -I/usr/include/opus  -I/usr/include/SDL2 -D_REENTRANT -I/usr/include/SDL2 -D_REENTRANT -I/usr/include/libpng16 -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/sysprof-6 -pthread  -I/usr/include/SDL2 -D_REENTRANT -DSDL
    LDFLAGS: -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -flto=auto
    LIBS: -lpng16 -lzzip -lz -lcurl -L/usr/lib/ffmpeg4.4 -lavcodec -lavformat -lavutil -lswscale -lswresample -lSDL2_image -lSDL2 -lopenal -lsndfile -lz -lSDL2_net -lSDL2 -lSDL2_ttf -lSDL2 -lboost_filesystem -lboost_system  -lSDL2 -lGL -lpthread -lGLU

Summary of optional features:

    Enabled: OpenGL rendering
    Enabled: built-in Lua scripting
    Enabled: SDL2_image support
    Enabled: FFmpeg playback and film export
Not found: SMPEG movie playback
    Enabled: cURL for HTTP communication
    Enabled: zziplib support
    Enabled: libpng PNG screenshot support
Not found: miniupnpc support

AUR PKGBUILD file:

# Maintainer: Frederic Bezies <fredbezies at gmail dot com>
# Contributors: Marcin Skory, Arkham, Christoph Zeiler, Jacek Poplawski, carstene1ns

pkgname=alephone
_pkgdate=20240119
pkgver=1.7.1_$_pkgdate
pkgrel=1
pkgdesc='A free, enhanced port of the classic FPS "Marathon 2" by Bungie Software'
arch=('i686' 'x86_64')
url="https://alephone.lhowon.org/"
license=('GPL3')
depends=('sdl2_ttf' 'sdl2_image' 'sdl2_net' 'libmad' 'glu' 'zziplib'
        'ffmpeg4.4' 'boost-libs' 'curl')
optdepends=('alephone-eternalx: community-made scenario'
            'alephone-evil: community-made scenario'
            'alephone-infinity: original data for Marathon Infinity'
            'alephone-marathon: M1A1 data converted for AlephOne'
            'alephone-marathon2: original data for Marathon 2: Durandal')
makedepends=('boost' 'mesa' 'icoutils')
source=("https://github.com/Aleph-One-Marathon/alephone/releases/download/release-$_pkgdate/AlephOne-$_pkgdate.tar.bz2")
sha256sums=('7acaa384e4abaad6a99d2f7117f1138609f673fbd6e214e932979c5d6e81cc04')

prepare() {
    cd AlephOne-$_pkgdate

    # convert the windows icons
    cd Resources/Windows
    icotool -x -w 48 alephone.ico -o "$srcdir"/alephone.png
    icotool -x -w 48 marathon.ico -o "$srcdir"/alephone-marathon.png
    icotool -x -w 48 marathon2.ico -o "$srcdir"/alephone-marathon2.png
    icotool -x -w 48 marathon-infinity.ico -o "$srcdir"/alephone-infinity.png
}

build() {
    cd AlephOne-$_pkgdate

    PKG_CONFIG_PATH="/usr/lib/ffmpeg4.4/pkgconfig" ./configure --prefix=/usr
    make
}

package() {
    cd AlephOne-$_pkgdate

    make DESTDIR="$pkgdir/" install

    # icons
    install -d "$pkgdir"/usr/share/icons
    install -m644 "$srcdir"/*.png "$pkgdir"/usr/share/icons

    # docs
    #install -Dm644 README.txt "$pkgdir"/usr/share/doc/alephone/README
    #install -m644 docs/*.html "$pkgdir"/usr/share/doc/alephone
}
treellama commented 2 months ago

That looks similar to what I have. Weird...

Ismail-Smile commented 2 months ago

Tried with 1.7.1 from git and it worked perfectly! It must be one of the options from the PKGBUILD file from the AUR that is causing the problem.

Running ./configure from the git source gives me this:

checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking target system type... x86_64-pc-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a race-free mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether the compiler supports GNU C... yes
checking whether gcc accepts -g... yes
checking for gcc option to enable C11 features... none needed
checking whether gcc understands -c and -o together... yes
checking whether make supports the include directive... yes (GNU style)
checking dependency style of gcc... gcc3
checking how to run the C preprocessor... gcc -E
checking for g++... g++
checking whether the compiler supports GNU C++... yes
checking whether g++ accepts -g... yes
checking for g++ option to enable C++11 features... none needed
checking dependency style of g++... gcc3
checking how to run the C++ preprocessor... g++ -E
checking for g++... g++
checking whether the compiler supports GNU Objective C++... no
checking whether g++ accepts -g... no
checking dependency style of g++... gcc3
checking for ranlib... ranlib
checking whether g++ supports C++17 features by default... yes
checking for stdio.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for strings.h... yes
checking for sys/stat.h... yes
checking for sys/types.h... yes
checking for unistd.h... yes
checking for unistd.h... (cached) yes
checking for pwd.h... yes
checking for boostlib >= 1.65.0 (106500)... yes
checking whether the Boost::System library is available... yes
checking for exit in -lboost_system... yes
checking whether the Boost::Filesystem library is available... yes
checking for exit in -lboost_filesystem... yes
checking for boost/tokenizer.hpp... yes
checking for boost/unordered_map.hpp... yes
checking for boost/algorithm/string/predicate.hpp... yes
checking for boost/iostreams/stream_buffer.hpp... yes
checking for boost/property_tree/xml_parser.hpp... yes
checking for boost/uuid/uuid.hpp... yes
checking for snprintf... yes
checking for vsnprintf... yes
checking for sysconf... yes
checking for sysctlbyname... no
checking for mkstemp... yes
checking for library containing gethostbyname... none required
checking for library containing socket... none required
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for sdl2 >= 2.0.2... yes
checking for SDL2_ttf... yes
checking for SDL2_net... yes
checking for zlib... yes
checking for sndfile... yes
checking for openal >= 1.14.0... yes
checking for OpenGL support... yes
checking for gluScaleImage in -lGLU... yes
checking for GL/glext.h... yes
checking for SDL2_image... yes
checking for libavcodec >= 54.35.0 libavformat >= 54.20.0 libavutil >= 52.3.0 libswscale >= 2.1.1 libswresample >= 3.0.0 ... yes
checking for smpeg/smpeg.h... no
checking for libcurl >= 7.31.0... yes
checking for zziplib >= 0.10.75... yes
checking for libpng... yes
checking for miniupnpc/miniupnpc.h... no
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating AlephOne.spec
config.status: creating Source_Files/Makefile
config.status: creating Source_Files/CSeries/Makefile
config.status: creating Source_Files/FFmpeg/Makefile
config.status: creating Source_Files/Files/Makefile
config.status: creating Source_Files/GameWorld/Makefile
config.status: creating Source_Files/Input/Makefile
config.status: creating Source_Files/Lua/Makefile
config.status: creating Source_Files/Misc/Makefile
config.status: creating Source_Files/ModelView/Makefile
config.status: creating Source_Files/Network/Makefile
config.status: creating Source_Files/Network/Metaserver/Makefile
config.status: creating Source_Files/RenderMain/Makefile
config.status: creating Source_Files/RenderOther/Makefile
config.status: creating Source_Files/Sound/Makefile
config.status: creating Source_Files/TCPMess/Makefile
config.status: creating Source_Files/XML/Makefile
config.status: creating tools/Makefile
config.status: creating tools/headertest/GNUmakefile
config.status: creating data/Makefile
config.status: creating data/default_theme/Makefile
config.status: creating data/icons/Makefile
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing depfiles commands

Compilation settings:

        CC: gcc
        CXX: g++
        CPP: gcc -E
    CFLAGS: -g -O2
CXXFLAGS: -g -O2
CPPFLAGS: -I/usr/include/libpng16    -I/usr/include/SDL2 -D_REENTRANT -I/usr/include/libpng16 -DHWY_SHARED_DEFINE -DAVIF_DLL -I/usr/include/webp -I/usr/include/AL -I/usr/include/opus  -I/usr/include/SDL2 -D_REENTRANT -I/usr/include/SDL2 -D_REENTRANT -I/usr/include/libpng16 -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/sysprof-6 -pthread  -I/usr/include/SDL2 -D_REENTRANT -DSDL
    LDFLAGS: 
    LIBS: -lpng16 -lzzip -lz -lcurl -lavcodec -lavformat -lavutil -lswscale -lswresample -lSDL2_image -lSDL2 -lopenal -lsndfile -lz -lSDL2_net -lSDL2 -lSDL2_ttf -lSDL2 -lboost_filesystem -lboost_system  -lSDL2 -lGL -lpthread -lGLU

Summary of optional features:

    Enabled: OpenGL rendering
    Enabled: built-in Lua scripting
    Enabled: SDL2_image support
    Enabled: FFmpeg playback and film export
Not found: SMPEG movie playback
    Enabled: cURL for HTTP communication
    Enabled: zziplib support
    Enabled: libpng PNG screenshot support
Not found: miniupnpc support

Configuration done. Now type "make".
Ismail-Smile commented 2 months ago

What jumps out to me as the most notable difference is that the AUR adds a lot of CXXFLAGS.

CXXFLAGS: -march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions         -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security         -fstack-clash-protection -fcf-protection -Wp,-D_GLIBCXX_ASSERTIONS -flto=auto

Versus this:

CXXFLAGS: -g -O2