Closed ma8ma closed 2 months ago
スレビューでマウスホイールを使ってスクロールしたときに異常終了することがある
バグの説明
なんかやたら落ちるようになったとエラーメッセージの報告がスレにありました。
/usr/include/c++/9/bits/stl_algo.h:3721: constexpr const _Tp& std::clamp(const _Tp&, const _Tp&, const _Tp&) [with _Tp = double]: Assertion '!(hi < lo)' failed. 中止 (コアダンプ)
https://next2ch.net/test/read.cgi/linux/1654053581/194-195n
試したところスレビューでマウスホイールを使ってスクロールしたときに異常終了することがあったので報告します。
再現の方法
$ meson setup debug -Doptimization=g -Dcpp_args="-Wp,-D_GLIBCXX_ASSERTIONS"
$ JDIM_CACHE=$(pwd)/Test_new ./debug/src/jdim
/usr/include/c++/13/bits/stl_algo.h:3669: constexpr const _Tp& std::clamp(const _Tp&, const _Tp&, const _Tp&) [with _Tp = double]: Assertion '!(__hi < __lo)' failed. 中止 (コアダンプ)
snapのedgeチャンネルでも発生しました。
やりたかったこと・期待する結果
マウスホイールで上へスクロールしても異常終了しない。
スクリーンショット
なし
動作環境
masterブランチからビルド
[バージョン] JDim 0.11.0-20240504(git:368d7c54e6) [ディストリ ] Ubuntu 23.10 (x86_64) [パッケージ] バイナリ/ソース( <配布元> ) [ DE/WM ] KDE [ gtkmm ] 3.24.8 [ glibmm ] 2.66.6 [ TLS lib ] GnuTLS 3.8.1 [ そ の 他 ]
snap edgeチャンネル
[バージョン] JDim 0.11.0-20240504(git:368d7c54e6) [ディストリ ] Ubuntu Core 20 (x86_64) [パッケージ] Snap (JDimproved project) [ DE/WM ] KDE [ gtkmm ] 3.24.3 [ glibmm ] 2.64.4 [ TLS lib ] GnuTLS 3.6.13 [オプション ] '--with-pangolayout''--disable-compat-cache-dir' [ そ の 他 ]
追加の情報
gdbのバックトレース
/usr/include/c++/13/bits/stl_algo.h:3669: constexpr const _Tp& std::clamp(const _Tp&, const _Tp&, const _Tp&) [with _Tp = double]: Assertion '!(__hi < __lo)' failed. Thread 1 "jdim" received signal SIGABRT, Aborted. __pthread_kill_implementation (no_tid=0, signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:44 44 ./nptl/pthread_kill.c: そのようなファイルやディレクトリはありません. (gdb) bt #0 __pthread_kill_implementation (no_tid=0, signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:44 #1 __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78 #2 __GI___pthread_kill (threadid=<optimized out>, signo=signo@entry=6) at ./nptl/pthread_kill.c:89 #3 0x00007ffff60428e6 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26 #4 0x00007ffff60268b7 in __GI_abort () at ./stdlib/abort.c:79 #5 0x00007ffff64e219f in std::__glibcxx_assert_fail(char const*, int, char const*, char const*) () at /lib/x86_64-linux-gnu/libstdc++.so.6 #6 0x000055555594a365 in std::clamp<double> (__val=@0x7fffffffcd18: 5149, __lo=@0x7fffffffcd40: 0, __hi=@0x7fffffffcd60: -51) at /usr/include/c++/13/bits/stl_algo.h:3669 #7 0x000055555593f99a in ARTICLE::DrawAreaBase::exec_scroll (this=this@entry=0x555556cedb30) at ../src/article/drawareabase.cpp:3286 (snip) (gdb) frame 6 #6 0x000055555594a365 in std::clamp<double> (__val=@0x7fffffffcd18: 5149, __lo=@0x7fffffffcd40: 0, __hi=@0x7fffffffcd60: -51) at /usr/include/c++/13/bits/stl_algo.h:3669 3669 __glibcxx_assert(!(__hi < __lo)); (gdb) p __hi $5 = (const double &) @0x7fffffffcd60: -51 (gdb) p __lo $6 = (const double &) @0x7fffffffcd40: 0 (gdb) frame 7 #7 0x000055555593f99a in ARTICLE::DrawAreaBase::exec_scroll (this=this@entry=0x555556cedb30) at ../src/article/drawareabase.cpp:3286 3286 const int y_new = static_cast<int>(std::clamp<double>( adjust->get_upper() - adjust->get_page_size(), 0, y ));
原因は https://github.com/JDimproved/JDim/pull/1389 ですかね。
drawareabase.cppの条件がミスしてますね。 😫
https://github.com/JDimproved/JDim/commit/2a3cad6e5b08ee8a7b970865eb1245db73ef0643#diff-76982bc6007b9a280794a2bc21cadad24932195c7ddf30bd8eb87383816007dc
ここのy = hiがマイナスになりstd::clamp()の前提条件!(hi < lo)に反する状態を見落としていました。 std::clamp()では書けないのかな、ちょっと用事があるので夜に見てみます。
!(hi < lo)
スレビューでマウスホイールを使ってスクロールしたときに異常終了することがある
バグの説明
なんかやたら落ちるようになったとエラーメッセージの報告がスレにありました。
https://next2ch.net/test/read.cgi/linux/1654053581/194-195n
試したところスレビューでマウスホイールを使ってスクロールしたときに異常終了することがあったので報告します。
再現の方法
snapのedgeチャンネルでも発生しました。
やりたかったこと・期待する結果
マウスホイールで上へスクロールしても異常終了しない。
スクリーンショット
なし
動作環境
masterブランチからビルド
snap edgeチャンネル
追加の情報
gdbのバックトレース