Hi,

In some cases (substituter error), I’m getting this:

  unexpected Nix daemon error: boost::too_few_args: format-string refered to 
more arguments than were passed

After replacing the ‘throw’ with ‘abort’ in format_implementation.cc, I
was able to get a backtrace:

--8<---------------cut here---------------start------------->8---
(gdb) bt
#0  0x00007fe60908d409 in raise () from 
/gnu/store/hf5kklv837xbfcv6gc7gpsj36l69j3sj-glibc-2.19/lib/libc.so.6
#1  0x00007fe60908e808 in abort () from 
/gnu/store/hf5kklv837xbfcv6gc7gpsj36l69j3sj-glibc-2.19/lib/libc.so.6
#2  0x000000000047aac2 in boost::basic_format::str 
(this=this@entry=0x7ffffa463b40) at 
nix/boost/format/format_implementation.cc:164
#3  0x000000000047594c in nix::printMsg_ (level=level@entry=nix::lvlError, 
f=...) at nix/libutil/util.cc:455
#4  0x0000000000426ba4 in nix::LocalStore::getLineFromSubstituter 
(this=this@entry=0xc7f500, run=...) at nix/libstore/local-store.cc:1145
#5  0x000000000042ccf0 in nix::LocalStore::querySubstitutablePaths 
(this=0xc7f500, paths=...) at nix/libstore/local-store.cc:1193
#6  0x00000000004090c5 in performOp (from=..., to=..., op=32, 
clientVersion=<optimized out>, trusted=false) at 
nix/nix-daemon/nix-daemon.cc:332
#7  processConnection (trusted=trusted@entry=false) at 
nix/nix-daemon/nix-daemon.cc:730
#8  0x000000000040dc94 in daemonLoop () at nix/nix-daemon/nix-daemon.cc:904
#9  0x000000000040e5b1 in run (args=...) at nix/nix-daemon/nix-daemon.cc:929
#10 0x0000000000406dc1 in main (argc=<optimized out>, argv=<optimized out>) at 
nix/nix-daemon/guix-daemon.cc:325
(gdb) bt full
#0  0x00007fe60908d409 in raise () from 
/gnu/store/hf5kklv837xbfcv6gc7gpsj36l69j3sj-glibc-2.19/lib/libc.so.6
No symbol table info available.
#1  0x00007fe60908e808 in abort () from 
/gnu/store/hf5kklv837xbfcv6gc7gpsj36l69j3sj-glibc-2.19/lib/libc.so.6
No symbol table info available.
#2  0x000000000047aac2 in boost::basic_format::str 
(this=this@entry=0x7ffffa463b40) at 
nix/boost/format/format_implementation.cc:164
        sz = <optimized out>
        i = <optimized out>
        res = {static npos = <optimized out>, _M_dataplus = 
{<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data 
fields>}, <No data fields>}, 
            _M_p = 0xcfd308 "1724: 13 [%start-stack load-stack #<procedure 
9ee040 at ice-9/boot-9.scm:4041:10 ()>]\n"}}
        __PRETTY_FUNCTION__ = "std::string boost::basic_format::str() const"
#3  0x000000000047594c in nix::printMsg_ (level=level@entry=nix::lvlError, 
f=...) at nix/libutil/util.cc:455
        prefix = {static npos = <optimized out>, _M_dataplus = 
{<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data 
fields>}, <No data fields>}, 
            _M_p = 0x6ad8d8 
<std::string::_Rep::_S_empty_rep_storage@@GLIBCXX_3.4+24> ""}}
        s = {static npos = <optimized out>, _M_dataplus = 
{<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data 
fields>}, <No data fields>}, _M_p = 0x49 <error: Cannot access memory at 
address 0x49>}}
#4  0x0000000000426ba4 in nix::LocalStore::getLineFromSubstituter 
(this=this@entry=0xc7f500, run=...) at nix/libstore/local-store.cc:1145
        buf = "1724: 13 [%start-stack load-stack #<procedure 9ee040 at 
ice-9/boot-9.scm:4041:10 
()>]\n\343ζ\270\066\231\307>\376\253*\373U\360\357ZG\335\300\301\350=\032ӱ\230\250)\241b\034\342lO\317H\345,\035\031O%j[\336uc\341\301\364%E6\242\024$@(\001D\021\304\342\033\270GD?\222Jw=҂`\243\000\213\206\353\035rs\331\377\353D\365߃m\031\252u\366\344\256\fhz\240ȺZz\313\017s\365!\257K)\021\t7\005c\267"...
        n = <optimized out>
        p = 85
        fds = {fds_bits = {16384, 0 <repeats 15 times>}}
        res = {static npos = <optimized out>, _M_dataplus = 
{<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data 
fields>}, <No data fields>}, 
            _M_p = 0x6ad8d8 
<std::string::_Rep::_S_empty_rep_storage@@GLIBCXX_3.4+24> ""}}
        err = {static npos = <optimized out>, _M_dataplus = 
{<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data 
fields>}, <No data fields>}, 
            _M_p = 0xcfd308 "1724: 13 [%start-stack load-stack #<procedure 
9ee040 at ice-9/boot-9.scm:4041:10 ()>]\n"}}
#5  0x000000000042ccf0 in nix::LocalStore::querySubstitutablePaths 
(this=0xc7f500, paths=...) at nix/libstore/local-store.cc:1193
        path = {static npos = <optimized out>, _M_dataplus = 
{<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data 
fields>}, <No data fields>}, 
            _M_p = 0x6ad8d8 
<std::string::_Rep::_S_empty_rep_storage@@GLIBCXX_3.4+24> ""}}
        run = @0xcead48: {program = {static npos = <optimized out>, _M_dataplus 
= {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data 
fields>}, <No data fields>}, _M_p = 0xcb8938 "substitute-binary"}}, 
          pid = {pid = 14286, separatePG = false, killSignal = 9}, to = {fd = 
11}, from = {fd = 12}, error = {fd = 14}, fromBuf = {<nix::BufferedSource> = 
{<nix::Source> = {
                _vptr.Source = 0x492e70 <vtable for nix::FdSource+16>}, bufSize 
= 32768, bufPosIn = 0, bufPosOut = 0, buffer = 0xd2d620 "\n\266?\t\346\177"}, 
fd = 12}, disabled = false}
        s = {static npos = <optimized out>, _M_dataplus = 
{<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data 
fields>}, <No data fields>}, 
            _M_p = 0xd37e68 "have 
/gnu/store/0d7xnp3nji2mi4cw4jmd3mzbpija9a5a-xz-5.0.4.tar.gz 
/gnu/store/0m6iv2lbkbjb3imjy29vqdrkv48wrjk0-linux-libre-headers-3.3.8 
/gnu/store/0mnhmrnvmgvaiqkf78l8k51icbn6mzdn-module-import /gnu/st"...}}
        i = {_M_node = 0xc6efa0}
        res = {_M_t = {
            _M_impl = 
{<std::allocator<std::_Rb_tree_node<std::basic_string<char, 
std::char_traits<char>, std::allocator<char> > > >> = 
{<__gnu_cxx::new_allocator<std::_Rb_tree_node<std::basic_string<char, 
std::char_traits<char>, std::allocator<char> > > >> = {<No data fields>}, <No 
data fields>}, 
              _M_key_compare = {<std::binary_function<std::basic_string<char, 
std::char_traits<char>, std::allocator<char> >, std::basic_string<char, 
std::char_traits<char>, std::allocator<char> >, bool>> = {<No data fields>}, 
<No data fields>}, _M_header = {_M_color = std::_S_red, _M_parent = 0x0, 
_M_left = 0x7ffffa4653e8, _M_right = 0x7ffffa4653e8}, _M_node_count = 0}}}
#6  0x00000000004090c5 in performOp (from=..., to=..., op=32, 
clientVersion=<optimized out>, trusted=false) at 
nix/nix-daemon/nix-daemon.cc:332
        paths = {_M_t = {
            _M_impl = 
{<std::allocator<std::_Rb_tree_node<std::basic_string<char, 
std::char_traits<char>, std::allocator<char> > > >> = 
{<__gnu_cxx::new_allocator<std::_Rb_tree_node<std::basic_string<char, 
std::char_traits<char>, std::allocator<char> > > >> = {<No data fields>}, <No 
data fields>}, 
              _M_key_compare = {<std::binary_function<std::basic_string<char, 
std::char_traits<char>, std::allocator<char> >, std::basic_string<char, 
std::char_traits<char>, std::allocator<char> >, bool>> = {<No data fields>}, 
<No data fields>}, _M_header = {_M_color = std::_S_red, _M_parent = 0xcf6630, 
_M_left = 0xd1ddc0, _M_right = 0xc944f0}, _M_node_count = 146}}}
        res = {_M_t = {
            _M_impl = 
{<std::allocator<std::_Rb_tree_node<std::basic_string<char, 
std::char_traits<char>, std::allocator<char> > > >> = 
{<__gnu_cxx::new_allocator<std::_Rb_tree_node<std::basic_string<char, 
std::char_traits<char>, std::allocator<char> > > >> = {<No data fields>}, <No 
data fields>}, 
              _M_key_compare = {<std::binary_function<std::basic_string<char, 
std::char_traits<char>, std::allocator<char> >, std::basic_string<char, 
std::char_traits<char>, std::allocator<char> >, bool>> = {<No data fields>}, 
<No data fields>}, _M_header = {_M_color = std::_S_red, _M_parent = 0x0, 
_M_left = 0x7ffffa4653e8, _M_right = 0x7ffffa4653e8}, _M_node_count = 0}}}
#7  processConnection (trusted=trusted@entry=false) at 
nix/nix-daemon/nix-daemon.cc:730
        op = <optimized out>
        magic = <optimized out>
        clientVersion = <optimized out>
        reserveSpace = <optimized out>
        __PRETTY_FUNCTION__ = "void processConnection(bool)"
        opCount = 326
#8  0x000000000040dc94 in daemonLoop () at nix/nix-daemon/nix-daemon.cc:904
        remote = {fd = 4}
        clientUid = 1000
        trusted = false
        cred = {pid = 14272, uid = 1000, gid = 100}
        credLen = 12
        remoteAddr = {sun_family = 1, 
          sun_path = 
"./socket\000\000\000\000\000\000\000\000\000\000\001\000\000\000o\003\000\000\001",
 '\000' <repeats 11 times>, 
"\250\227<\n\346\177\000\000\300sF\372\377\177\000\000\340\024=\n\346\177\000\000\350sF\372\377\177\000\000\210\021=\n\346\177\000\000\001\000\000\000\000\000\000\000\215\224\033\n\346\177\000\000\000\000\000\000\000\000\000\000\250\227<\n\346\177"}
        remoteAddrLen = 2
        clientPid = 14272
        child = <optimized out>
        fdSocket = {fd = 3}
        __PRETTY_FUNCTION__ = "void daemonLoop()"
#9  0x000000000040e5b1 in run (args=...) at nix/nix-daemon/nix-daemon.cc:929
No locals.
#10 0x0000000000406dc1 in main (argc=<optimized out>, argv=<optimized out>) at 
nix/nix-daemon/guix-daemon.cc:325
        search_path = {static npos = <optimized out>, _M_dataplus = 
{<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data 
fields>}, <No data fields>}, 
            _M_p = 0xc6f0a8 
"/home/ludo/src/guix/nix/scripts:/home/ludo/src/guix/scripts:/home/ludo/src/guix:/home/ludo/soft/bin:/var/setuid-wrappers:/home/ludo/.guix-profile/bin:/home/ludo/.guix-profile/sbin:/home/ludo/bin:/var/"...}}
        nothing = {<std::_List_base<std::basic_string<char, 
std::char_traits<char>, std::allocator<char> >, 
std::allocator<std::basic_string<char, std::char_traits<char>, 
std::allocator<char> > > >> = {
            _M_impl = {<std::allocator<std::_List_node<std::basic_string<char, 
std::char_traits<char>, std::allocator<char> > > >> = 
{<__gnu_cxx::new_allocator<std::_List_node<std::basic_string<char, 
std::char_traits<char>, std::allocator<char> > > >> = {<No data fields>}, <No 
data fields>}, _M_node = {_M_next = 0x7ffffa4675c0, _M_prev = 
0x7ffffa4675c0}}}, <No data fields>}
--8<---------------cut here---------------end--------------->8---

(Unfortunately I don’t have the libstdc++ pretty-printers here.)

I’m under the impression that the 2nd arg to printMsg (in
‘getLineFromSubstituter’) is implicitly cast to ‘format’, which is
likely to cause problems if it contains the percent sign.

Ideas?

Thanks,
Ludo’.
_______________________________________________
nix-dev mailing list
nix-dev@lists.science.uu.nl
http://lists.science.uu.nl/mailman/listinfo/nix-dev

Reply via email to