[ 
https://issues.apache.org/jira/browse/MESOS-9393?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16688874#comment-16688874
 ] 

James Peach commented on MESOS-9393:
------------------------------------

Probably need to ensure that we are building libarchive with {{\-\-with-iconv}}.

> Fetcher crashes extracting archives with non-ASCII filenames.
> -------------------------------------------------------------
>
>                 Key: MESOS-9393
>                 URL: https://issues.apache.org/jira/browse/MESOS-9393
>             Project: Mesos
>          Issue Type: Bug
>          Components: fetcher
>            Reporter: James Peach
>            Priority: Critical
>
> {noformat}
> (gdb) bt
> #0  0x00007f2ec3827925 in raise () from /lib64/libc.so.6
> #1  0x00007f2ec3829105 in abort () from /lib64/libc.so.6
> #2  0x00007f2ec3e5da5d in __gnu_cxx::__verbose_terminate_handler() () from 
> /usr/lib64/libstdc++.so.6
> #3  0x00007f2ec3e5bbe6 in ?? () from /usr/lib64/libstdc++.so.6
> #4  0x00007f2ec3e5bc13 in std::terminate() () from /usr/lib64/libstdc++.so.6
> #5  0x00007f2ec3e5bd0e in __cxa_throw () from /usr/lib64/libstdc++.so.6
> #6  0x00007f2ec3e00837 in std::__throw_logic_error(char const*) () from 
> /usr/lib64/libstdc++.so.6
> #7  0x00007f2ec3e3be59 in ?? () from /usr/lib64/libstdc++.so.6
> #8  0x00007f2ec3e3bf33 in std::basic_string<char, std::char_traits<char>, 
> std::allocator<char> >::basic_string(char const*, std::allocator<char> 
> const&) ()
>    from /usr/lib64/libstdc++.so.6
> #9  0x0000555f5e843a6d in archiver::extract (source=...,
>     
> destination="/tmp/mesos/slaves/04f97156-23b7-4411-8fa7-bdec71518221-S1320/frameworks/156b4459-4bb6-460b-89e5-d8c583dee257-0413/executors/cstapper-test-service.simple-pod.test.0.ti9dgngkdceq2_0/runs/4a2a188e-54ef-4"...,
>  flags=<optimized out>) at ../../3rdparty/stout/include/stout/archiver.hpp:130
> #10 0x0000555f5e859f06 in extract 
> (sourcePath="/tmp/mesos/fetch/siri/c3-ace-inspector.tar.gz",
>     
> destinationDirectory="/tmp/mesos/slaves/04f97156-23b7-4411-8fa7-bdec71518221-S1320/frameworks/156b4459-4bb6-460b-89e5-d8c583dee257-0413/executors/cstapper-test-service.simple-pod.test.0.ti9dgngkdceq2_0/runs/4a2a188e-54ef-4"...)
>  at ../../src/launcher/fetcher.cpp:86
> {noformat}
> {noformat}
> (gdb) p (struct archive_string_conv 
> *)archive_string_conversion_to_charset(entry->archive, "UTF-8", 1)
> $1 = (struct archive_string_conv *) 0x7fe599cd2be0
> (gdb) p &entry->ae_pathname
> $2 = (struct archive_mstring *) 0x7fe599c48010
> (gdb) p (int)archive_strncpy_l(&($2->aes_utf8), $2->aes_mbs.s, 
> $2->aes_mbs.length, $1)
> $3 = -1
> {noformat}
> So archive_strncpy_l() fails with -1. best_effort_strncat_in_locale() has 
> this wonky-looking code:
> {noformat}
> 2235   remaining = length;
> 2236   itp = (const uint8_t *)_p;
> 2237   while (*itp && remaining > 0) {
> 2238     if (*itp > 127) {
> 2239       // Non-ASCII: Substitute with suitable replacement
> 2240       if (sc->flag & SCONV_TO_UTF8) {
> 2241         if (archive_string_append(as, utf8_replacement_char, 
> sizeof(utf8_replacement_char)) == NULL) {
> 2242           __archive_errx(1, "Out of memory");
> 2243         }
> 2244       } else {
> 2245         archive_strappend_char(as, '?');
> 2246       }
> 2247       return_value = -1;
> 2248     } else {
> 2249       archive_strappend_char(as, *itp);
> 2250     }
> 2251     ++itp;
> 2252   }
> (gdb) break best_effort_strncat_in_locale
> Breakpoint 2 at 0x56143c85ff70: file libarchive/archive_string.c, line 2213.
> (gdb) p (int)archive_strncpy_l(&($2->aes_utf8), $2->aes_mbs.s, 
> $2->aes_mbs.length, $1)
> ...
> (gdb)
> 2237          while (*itp && remaining > 0) {
> (gdb)
> 2238                  if (*itp > 127) {
> (gdb)
> 2240                          if (sc->flag & SCONV_TO_UTF8) {
> (gdb)
> 2241                                  if (archive_string_append(as, 
> utf8_replacement_char, sizeof(utf8_replacement_char)) == NULL) {
> (gdb)
> 2251                  ++itp;
> (gdb)
> 2237          while (*itp && remaining > 0) {
> (gdb)
> 2247                          return_value = -1;
> (gdb) p *itp
> $5 = 195 '\303'
> {noformat}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to