Libelektra: cmerge: segfault

Creado en 15 nov. 2019  ·  7Comentarios  ·  Fuente: ElektraInitiative/libelektra

Pasos para reproducir el problema

Configure y haga libelektra.

make run all

Resultado Esperado

Todas las pruebas tienen éxito.

Resultado actual

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

Información del sistema

  • Versión de Elektra: maestro
  • Fedora 31

Más archivos de registro y resultados

cmerge.txt

bug

Comentario más útil

@ Chemin1 gracias por arreglarlo tan rápido. Puedo confirmar que ahora me funciona.

Todos 7 comentarios

Tengo libgit2 0.28.3 en linux y esto no funciona. La eliminación de la comprobación CMERGE_ON_LINUX en el código corrige el error de segmentación.
https://github.com/ElektraInitiative/libelektra/blob/4ee9617186fe053107530624b27ff2825478f257/src/libs/merge/kdbmerge.c#L991

¡Gracias por reportar este problema!

Definitivamente deberíamos arreglar esto antes de la 0.9.1. Quizás simplemente desactivando libgit2 en este caso.

@mpranj también puede publicar la salida de gdb, la salida de valgrind no es tan útil.

Apuesto a que se trata de LibGit. La biblioteca debe inicializarse con git_libgit2_init () de acuerdo con su documentación.

Cuando no inicializamos LibGit en todos los Linux en el servidor de compilación, no obtenemos pérdidas de memoria. Si inicializamos, lo hacemos. Sin embargo, si no inicializamos para las compilaciones de FreeBSD, obtenemos segfaults. Esta es la razón por la que existen esas extrañas ifdefs. También hice mi primera publicación de Stackoverflow sobre esto.

Con suerte, # 3221 soluciona esto.

La salida de Gdb tampoco es muy útil. No estoy seguro de por qué, tengo los símbolos de depuración de las bibliotecas y es una compilación de depuración de 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

He verificado que #ifndef CMERGE_ON_LINUX es la causa raíz en mi sistema, pero no tuve tiempo de hacer un parche portátil para él.

@ Chemin1 ¡ gracias por trabajar en ello!

@ Chemin1 gracias por arreglarlo tan rápido. Puedo confirmar que ahora me funciona.

¡Gracias por probarlo, @mpranj !

¿Fue útil esta página
0 / 5 - 0 calificaciones