Я пытаюсь использовать gloox 1.0.14 в первый раз, и я думаю, что я использую самый минимальный пример, но плохо я получаю SIGSEGV. Может ли кто-нибудь воспроизвести эту проблему или сказать мне, почему это происходит и что я делаю неправильно? Похоже, что JID влияет на это, но я ожидаю, что он выведет ошибку вместо сбоя segv, и JID кажется мне действительным, и даже если сертификат неправильный или что бы я еще ожидал, чтобы он бросил вместо.SIGSEGV простой клиент gloox
#include <cstdlib>
#include "gloox/client.h"
int main() {
gloox::JID jid("[email protected]");
gloox::Client client(jid, "password");
client.connect();
return EXIT_SUCCESS;
}
дезинфицирующее сказал мне:
ASAN:SIGSEGV
=================================================================
==27028==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x7f6357f79acd bp 0x7ffcca7c1a50 sp 0x7ffcca7c17d0 T0)
#0 0x7f6357f79acc (/lib64/libgnutls.so.30+0x99acc)
#1 0x7f6357f7b49a (/lib64/libgnutls.so.30+0x9b49a)
#2 0x7f6357f7bb18 in gnutls_x509_crt_verify (/lib64/libgnutls.so.30+0x9bb18)
#3 0x7f635a4ad54b in gloox::GnuTLSClient::verifyAgainstCAs(gnutls_x509_crt_int*, gnutls_x509_crt_int**, int) (/lib64/libgloox.so.13+0xbd54b)
#4 0x7f635a4ad6bf in gloox::GnuTLSClient::getCertInfo() (/lib64/libgloox.so.13+0xbd6bf)
#5 0x7f635a4afd6c in gloox::GnuTLSBase::handshake() (/lib64/libgloox.so.13+0xbfd6c)
#6 0x7f635a4afbc0 in gloox::GnuTLSBase::decrypt(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (/lib64/libgloox.so.13+0xbfbc0)
#7 0x7f635a4490bb in gloox::ConnectionTCPClient::recv(int) (/lib64/libgloox.so.13+0x590bb)
#8 0x7f635a4c297d in gloox::ConnectionTCPBase::receive() (/lib64/libgloox.so.13+0xd297d)
#9 0x7f635a4541d7 in gloox::ClientBase::connect(bool) (/lib64/libgloox.so.13+0x641d7)
#10 0x4014d7 in main test.cc:8
#11 0x7f6358aa357f in __libc_start_main (/lib64/libc.so.6+0x2057f)
#12 0x401198 in _start (test+0x401198)
AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV ??:0 ??
==27028==ABORTING
Я скомпилировал через:
c++ -fsanitize=address -fsanitize=undefined -ggdb -std=c++14 -Wall -Wextra -Wpedantic -Wconversion -Wsign-conversion -lgloox main.cc
Можете ли вы предоставить дополнительную информацию о вашей системе, компиляторе и т. Д. Я только что попробовал запустить ваш минимальный пример и не получил «SEGV». –
@NicholasSmith хорошо запускаю Fedora 23: 4.3.3-303.fc23.x86_64 x86_64 (64 бит) – noob
Обновите свою систему полностью. Скомпилируйте с включенными предупреждениями * all *, исправьте все возникающие проблемы. Попробуйте не так-экзотические флаги компилятора. Запустите под отладчиком. Сделайте так, чтобы ваша инфраструктура TLS не была обработана. – vonbrand