dom96 / choosenim

Tool for easily installing and managing multiple versions of the Nim programming language.
BSD 3-Clause "New" or "Revised" License
682 stars 65 forks source link

choosenim segfaults if ipv6 is disabled #253

Closed shirleyquirk closed 2 years ago

shirleyquirk commented 3 years ago

ref: https://forum.nim-lang.org/t/7702 to reproduce: curl https://nim-lang.org/choosenim/init.sh -sSf | sh on a system with ipv6 disabled in the kernel (I added ipv6.disable=1 to kernel args) and you get a segfault

i tried with the debug build:

❯ /tmp/choosenim-0.7.4_linux_amd64_debug show --verbose --debug
     Debug: Reporting to analytics...
Traceback (most recent call last)
/home/travis/build/dom96/choosenim/src/choosenim.nim(331) choosenim
/home/travis/build/dom96/choosenim/src/choosenim.nim(300) performAction
/home/travis/build/dom96/choosenim/src/choosenimpkg/telemetry.nim(164) report
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncmacro.nim(319) reportEvent
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncmacro.nim(34) reportEventNimAsyncContinue
/home/travis/.nimble/pkgs/analytics-0.2.0/analytics.nim(94) reportEventIter
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncmacro.nim(319) postContent
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncmacro.nim(34) postContentNimAsyncContinue
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/httpclient.nim(1106) postContentIter
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncmacro.nim(319) post
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncmacro.nim(34) postNimAsyncContinue
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/httpclient.nim(1100) postIter
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncmacro.nim(319) request
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncmacro.nim(34) requestNimAsyncContinue
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/httpclient.nim(1027) requestIter
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncmacro.nim(319) requestAux
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncmacro.nim(34) requestAuxNimAsyncContinue
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/httpclient.nim(977) requestAuxIter
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncmacro.nim(319) newConnection
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncmacro.nim(34) newConnectionNimAsyncContinue
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/httpclient.nim(866) newConnectionIter
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncmacro.nim(319) dial
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncmacro.nim(34) dialNimAsyncContinue
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncnet.nim(274) dialIter
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1778) dial
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1753) tryNextAddrInfo
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(297) callback=
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(290) callback=
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(269) addCallback
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(102) callSoon
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(297) :anonymous
(1874 calls omitted) ...
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(290) callback=
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(269) addCallback
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(102) callSoon
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(297) :anonymous
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1753) tryNextAddrInfo
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(297) callback=
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(290) callback=
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(269) addCallback
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(102) callSoon
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(297) :anonymous
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1753) tryNextAddrInfo
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(297) callback=
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(290) callback=
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(269) addCallback
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(102) callSoon
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(297) :anonymous
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1753) tryNextAddrInfo
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(297) callback=
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(290) callback=
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(269) addCallback
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(102) callSoon
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(297) :anonymous
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1753) tryNextAddrInfo
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(297) callback=
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(290) callback=
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(269) addCallback
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(102) callSoon
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(297) :anonymous
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1753) tryNextAddrInfo
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(297) callback=
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(290) callback=
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(269) addCallback
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(102) callSoon
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(297) :anonymous
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1753) tryNextAddrInfo
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(297) callback=
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(290) callback=
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(269) addCallback
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(102) callSoon
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(297) :anonymous
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1753) tryNextAddrInfo
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(297) callback=
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(290) callback=
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(269) addCallback
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(102) callSoon
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(297) :anonymous
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1753) tryNextAddrInfo
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(297) callback=
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(290) callback=
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(269) addCallback
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(102) callSoon
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(297) :anonymous
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1753) tryNextAddrInfo
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(297) callback=
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(290) callback=
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(269) addCallback
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(102) callSoon
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(297) :anonymous
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1753) tryNextAddrInfo
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(297) callback=
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(290) callback=
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(269) addCallback
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(102) callSoon
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(297) :anonymous
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1753) tryNextAddrInfo
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(297) callback=
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(290) callback=
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(269) addCallback
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(102) callSoon
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(297) :anonymous
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1753) tryNextAddrInfo
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(297) callback=
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(290) callback=
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(269) addCallback
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(102) callSoon
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(297) :anonymous
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1753) tryNextAddrInfo
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1663) doConnect
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(110) newFuture
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/system.nim(643) newSeq
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/system/gc.nim(448) newSeq
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/system/gc.nim(440) newObj
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/system/alloc.nim(808) rawAlloc
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/system/avltree.nim(62) add
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/system/avltree.nim(62) add
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/system/avltree.nim(67) add
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/system/avltree.nim(67) add
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/system/avltree.nim(62) add
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/system/avltree.nim(67) add
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/system/avltree.nim(62) add
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/system/avltree.nim(62) add
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/system/avltree.nim(67) add
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/system/avltree.nim(67) add
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/system/avltree.nim(62) add
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/system/avltree.nim(56) add
/home/travis/.choosenim/toolchains/nim-1.2.6/lib/system/alloc.nim allocAvlNode
Error: call depth limit reached in a debug build (2000 function calls). You can change it with -d:nimCallDepthLimit=<int> but really try to avoid deep recursions instead.

I cloned this repo, git checkout tags/v0.7.4, switched to nim 1.2.6,(using a working choosenim!) nimble build... all still with ipv6 disabled, and it worked fine :(

but seems related to #182

dom96 commented 2 years ago

This is a Nim stdlib bug. I've actually switched choosenim to use curl because of another bug so this should be fixed as a side-effect.