segfault on download
This is a bit long, sorry.
nget starts up and connects to the remote server, but when it tries to retrieve articles it segfaults on this line in prot_nntp.cc
:
pair<t_nntp_server_articles_prioritized::iterator,t_nntp_server_articles_prioritized::iterator> firstrange = sap.equal_range(sap.rend()->first);
$ ./nget -g comp.emacs -r 'vim'
make_connection(news.usenetserver.com,nntp)
Connecting to [185.90.196.128]:119 ... connected.
u >> 200 news.usenetserver.com Welcome!
u << GROUP comp.emacs
u >> 480 Authentication Required*
[removed]
u >> 281 Welcome to UsenetServer (Posting Allowed)
u << GROUP comp.emacs
u >> 211 23125 2 23126 comp.emacs
Retrieving headers 2-23126 : 23125/23125/23125 100% 663436B/s 12s
saving cache: 23125 parts, 23125 files.. done. (23125 sa)
Retrieving: 0 uns 5l 20031126T151801 Howto make VIM like Emacs dan_hoffard@hailmail.net (Dan) <648fff84.0311260718.7efdd207@posting.google.com>
Process 38296 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
frame #0: 0x0000000100023aac nget`bool std::__1::__tree_is_left_child<std::__1::__tree_node_base<void*>*>(__x=0x000000016fdfd780) at __tree:83:35
80 bool
81 __tree_is_left_child(_NodePtr __x) _NOEXCEPT
82 {
-> 83 return __x == __x->__parent_->__left_;
84 }
85
86 // Determines if the subtree rooted at __x is a proper red black subtree. If
Target 0: (nget) stopped.
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
* frame #0: 0x0000000100023aac nget`bool std::__1::__tree_is_left_child<std::__1::__tree_node_base<void*>*>(__x=0x000000016fdfd780) at __tree:83:35
frame #1: 0x0000000100025d9c nget`std::__1::__tree_node_base<void*>* std::__1::__tree_prev_iter<std::__1::__tree_node_base<void*>*, std::__1::__tree_end_node<std::__1::__tree_node_base<void*>*>*>(__x=0x000060000183ee80) at __tree:202:12
frame #2: 0x0000000100033e0c nget`std::__1::__tree_iterator<std::__1::__value_type<float, std::__1::pair<c_nntp_server_article*, c_refpointer<c_server> > >, std::__1::__tree_node<std::__1::__value_type<float, std::__1::pair<c_nntp_server_article*, c_refpointer<c_server> > >, void*>*, long>::operator--(this=0x000000016fdfd400) at __tree:853:44
frame #3: 0x0000000100033ddc nget`std::__1::__map_iterator<std::__1::__tree_iterator<std::__1::__value_type<float, std::__1::pair<c_nntp_server_article*, c_refpointer<c_server> > >, std::__1::__tree_node<std::__1::__value_type<float, std::__1::pair<c_nntp_server_article*, c_refpointer<c_server> > >, void*>*, long> >::operator--(this=0x000000016fdfd400) at map:830:35
frame #4: 0x0000000100033db0 nget`std::__1::reverse_iterator<std::__1::__map_iterator<std::__1::__tree_iterator<std::__1::__value_type<float, std::__1::pair<c_nntp_server_article*, c_refpointer<c_server> > >, std::__1::__tree_node<std::__1::__value_type<float, std::__1::pair<c_nntp_server_article*, c_refpointer<c_server> > >, void*>*, long> > >::operator*(this=0x000000016fdfd520) const at reverse_iterator.h:128:65
frame #5: 0x000000010001c190 nget`std::__1::reverse_iterator<std::__1::__map_iterator<std::__1::__tree_iterator<std::__1::__value_type<float, std::__1::pair<c_nntp_server_article*, c_refpointer<c_server> > >, std::__1::__tree_node<std::__1::__value_type<float, std::__1::pair<c_nntp_server_article*, c_refpointer<c_server> > >, void*>*, long> > >::operator->(this=0x000000016fdfd520) const at reverse_iterator.h:130:58
frame #6: 0x000000010001ba84 nget`c_prot_nntp::nntp_doarticle_prioritize(this=0x0000000100125148, part=0x000060000199ecc0, sap=size=1, docurservmult=true) at prot_nntp.cc:837:128
frame #7: 0x000000010001d194 nget`c_prot_nntp::nntp_doarticle(this=0x0000000100125148, part=0x000060000199ecc0, ari=0x000000016fdfdb58, toti=0x000000016fdfdba8, fn="/Users/paul/Documents/Programming/nget-rhialto/ngettemp-5243814f.-01", options=0x000000016fdfe748) at prot_nntp.cc:953:2
frame #8: 0x000000010001f3e8 nget`c_prot_nntp::nntp_doretrieve(this=0x0000000100125148, filec=0x000000016fdfdda8, parhandler=0x000000016fdfdd90, options=0x000000016fdfe748) at prot_nntp.cc:1241:48
frame #9: 0x000000010001fdf4 nget`c_prot_nntp::nntp_retrieve(this=0x0000000100125148, rgroups=size=1, getinfos=size=1, options=0x000000016fdfe748) at prot_nntp.cc:1109:2
frame #10: 0x0000000100006a58 nget`do_args(int, char const**, nget_options, int) + 8708
frame #11: 0x00000001000038a8 nget`main + 4712
frame #12: 0x00000001002f9088 dyld`start + 516
(lldb)
It's crashing when it's trying to walk through one of the priority trees, but I don't understand that part of the code. (I'm sure it's doing something clever, but it seems oddly structured.) If I effectively remove the section by changing
if (docurservmult && !sap.empty()) {
to
if (0 && docurservmult && !sap.empty()) {
then it runs fine.
macOS, M1 chip.