Libelektra: cmerge:segfault

作成日 2019年11月15日  ·  7コメント  ·  ソース: ElektraInitiative/libelektra

問題を再現する手順

libelektraを構成して作成します。

make run all

期待される結果

すべてのテストが成功します。

実結果

The following tests FAILED:
    210 - testshell_markdown_cmerge (Failed)
    225 - test_cmerge (SEGFAULT)
 valgrind ./bin/test_cmerge
==200629== Memcheck, a memory error detector
==200629== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==200629== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
==200629== Command: ./bin/test_cmerge
==200629== 
CMERGE       TESTS
==================

Executing testValuesWithGivenLength with size 59
==200629== Jump to the invalid address stated on the next line
==200629==    at 0x0: ???
==200629==    by 0xF: ???
==200629==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
==200629== 
==200629== 
==200629== Process terminating with default action of signal 11 (SIGSEGV): dumping core
==200629==  Bad permissions for mapped region at address 0x0
==200629==    at 0x0: ???
==200629==    by 0xF: ???
==200629== 
==200629== HEAP SUMMARY:
==200629==     in use at exit: 4,388 bytes in 64 blocks
==200629==   total heap usage: 169 allocs, 105 frees, 81,447 bytes allocated
==200629== 
==200629== LEAK SUMMARY:
==200629==    definitely lost: 0 bytes in 0 blocks
==200629==    indirectly lost: 0 bytes in 0 blocks
==200629==      possibly lost: 0 bytes in 0 blocks
==200629==    still reachable: 4,388 bytes in 64 blocks
==200629==         suppressed: 0 bytes in 0 blocks
==200629== Rerun with --leak-check=full to see details of leaked memory
==200629== 
==200629== For lists of detected and suppressed errors, rerun with: -s
==200629== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
[1]    200629 segmentation fault (core dumped)  valgrind ./bin/test_cmerge

システムインフォメーション

  • エレクトラバージョン:マスター
  • Fedora 31

その他のログファイルと出力

cmerge.txt

bug

最も参考になるコメント

@ Chemin1は、すぐに修正して

全てのコメント7件

Linuxでlibgit20.28.3を使用していますが、これは機能しません。 コードでCMERGE_ON_LINUXチェックを削除すると、セグメンテーション違反が修正されます。
https://github.com/ElektraInitiative/libelektra/blob/4ee9617186fe053107530624b27ff2825478f257/src/libs/merge/kdbmerge.c#L991

この問題を報告していただきありがとうございます。

0.9.1より前にこれを確実に修正する必要があります。 この場合、libgit2を無効にするだけかもしれません。

@mpranjはgdb出力を投稿することもできますが、valgrind出力はあまり役に立ちません。

私はそれがLibGitについてだと思います。 ライブラリは、ドキュメントに従ってgit_libgit2_init()で初期化する必要があります。

ビルドサーバー上のすべてのLinuxでLibGitを初期化しない場合、メモリリークは発生しません。 初期化する場合は、初期化します。 ただし、FreeBSDビルド用に初期化しないと、セグメンテーション違反が発生します。 これが、これらの奇妙なifdefが存在する理由です。 また、これについて最初のStackoverflow投稿を行いました。

うまくいけば、#3221はこれを修正します。

Gdbの出力もあまり役に立ちません。 理由はわかりません。ライブラリのデバッグシンボルがあり、elektraのデバッグビルドです。

GNU gdb (GDB) Fedora 8.3.50.20190824-24.fc31
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./bin/test_cmerge...
(gdb) r
Starting program: /home/mpranj/workspace/libelektra/build/bin/test_cmerge 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
CMERGE       TESTS
==================

Executing testValuesWithGivenLength with size 59

Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ?? ()
(gdb) q

#ifndef CMERGE_ON_LINUXがシステムの根本原因であることを確認しましたが、ポータブルパッチを作成する時間がありませんでした。

@ Chemin1作業していただき、ありがとうございます。

@ Chemin1は、すぐに修正して

テストしていただきありがとうございます、 @ mpranj

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

sanssecours picture sanssecours  ·  4コメント

mpranj picture mpranj  ·  3コメント

markus2330 picture markus2330  ·  4コメント

sanssecours picture sanssecours  ·  4コメント

markus2330 picture markus2330  ·  4コメント