View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0003896 | Far Manager | Viewer | public | 2021-09-10 11:13 | 2021-09-15 18:00 |
Reporter | emusic | Assigned To | 2useven10 | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | feedback | Resolution | open | ||
Platform | x86 | OS | Windows | ||
Product Version | 3.0 | ||||
Summary | 0003896: ArcLite:PE сваливается в Base64 на многих EXE | ||||
Description | С некоторых пор (минимум с версии 5858), ArcLite:PE стал сваливаться в Base64 на многих EXE, как старых, так и новых. Например, такое поведение вызывают почти все EXE из комплекта MS VC, как последних версий, так и древних. С DLL такой проблемы не отмечается. Ночная 5886 ведет себя так же. | ||||
Steps To Reproduce | Нажать Ctrl-PgDn на прилагаемом dumpbin.exe, или различных других EXE/PE. | ||||
Tags | ArcLite;PE;EXE;Base64 | ||||
Build | |||||
|
|
|
PeHandler 7zip возвращает "PADDINGPADDING..." из хвоста ресурсов PE файла как основной поток. И он распознаётся как BASE64, но не распаковывается. Самое простое отсекать маленький main для формата PE, у себя проверил - работает. Доступ к коммитам у меня отвалился (логин по паролю отменили), надо восстанавливать... |
|
отсекать маленький main для формата PEА 7zfm что в этом случае делает? |
|
7z пытается открыть этот хвост как Dmg архив (не знаю пока почему не Base64 как у arclite) и обламывается. |
|
Разница в итоге в том, что arclite открывает "PADDING...' как архив (если число букв кратно 3 - успешно), а 7z не считает это архивом. |
|
Это началось не так давно (я обычно обновляю FAR с задержкой в 2-3 месяца от релиза). В PE-файлы мне часто приходится лазить, раньше такого не было. |
|
Еще к размышлению: - а зачем мы вообще пытаемся угадать, чего хочет пользователь и пытаемся войти во вложенные архивы? Это вроде бы не унаследованное свойство 7z, а осознанное действие. Проблема в том, что если этот AI угадал, то экономится аж одно нажатие, но если не угадал, как здесь, то с этим уже ничего не сделаешь, надо выходить и входить вычурно, через F11. |
|
Base64Handler появился у 7zip в 21.02. Поскольку у 7zip такой проблемы нет, всё решаемо. |
|
а зачем мы вообще пытаемся угадать, чего хочет пользователь и пытаемся войти во вложенные архивы? Ну, в целом это удобно, я и сам бы предпочел автоматическое открывание архива вместо формата PE, поскольку PE мне интересен главным образом в обычных EXE. Но Base64 в PE - это нонсенс, так что имеет смысл отфильтровать этот вариант безусловно. |
|
А, ну да, SFX же. |
|
У кодеков появился новый флаг. bool Flags_ByExtOnlyOpen() const { return (Flags & NArcInfoFlags::kByExtOnlyOpen) != 0; } Base64 единственный у которого он выставлен, надо просто при наличии этого флага применять кодек только если раширение нужное (.b64, |
|
С доступом сейчас времени нет возиться, вот изменения: Index: archive.cpp =================================================================== --- archive.cpp (revision 27888) +++ archive.cpp (working copy) @@ -155,7 +155,7 @@ std::wstring result; std::for_each(begin(), end(), [&] (const ArcEntry& arc) { if (!result.empty()) - result += L"\x2192"; + result += L"→"; result += ArcAPI::formats().at(arc.type).name; }); return result; Index: archive.hpp =================================================================== --- archive.hpp (revision 27888) +++ archive.hpp (working copy) @@ -85,6 +85,7 @@ bool Flags_BackwardOpen() const { return (Flags & NArcInfoFlags::kBackwardOpen) != 0; } bool Flags_PreArc() const { return (Flags & NArcInfoFlags::kPreArc) != 0; } bool Flags_PureStartOpen() const { return (Flags & NArcInfoFlags::kPureStartOpen) != 0; } + bool Flags_ByExtOnlyOpen() const { return (Flags & NArcInfoFlags::kByExtOnlyOpen) != 0; } ArcFormat() : updatable(false), Flags(0), NewInterface(false), lib_index(-1), FormatIndex(0), IsArc(nullptr) {} }; Index: open.cpp =================================================================== --- open.cpp (revision 27888) +++ open.cpp (working copy) @@ -482,7 +482,9 @@ // std::for_each(arc_types.begin(), arc_types.end(), [&] (const ArcType& arc_type) { if (found_types.count(arc_type) == 0) { - arc_entries.push_back(ArcEntry(arc_type, 0)); + const auto& format = ArcAPI::formats().at(arc_type); + if (!format.Flags_ByExtOnlyOpen()) + arc_entries.push_back(ArcEntry(arc_type, 0)); } }); |
|
https://github.com/FarGroup/FarManager/commit/16c896ae337e35becb3cad6cfd9fb02d56aba6b2 |
Date Modified | Username | Field | Change |
---|---|---|---|
2021-09-10 11:13 | emusic | New Issue | |
2021-09-10 11:13 | emusic | Tag Attached: ArcLite;PE;EXE;Base64 | |
2021-09-10 11:13 | emusic | File Added: dumpbin.7z | |
2021-09-14 17:34 | 2useven10 | Note Added: 0017160 | |
2021-09-14 17:51 | DrKnS | Note Added: 0017161 | |
2021-09-15 01:19 | 2useven10 | Note Added: 0017162 | |
2021-09-15 05:47 | 2useven10 | Note Added: 0017163 | |
2021-09-15 09:08 | emusic | Note Added: 0017164 | |
2021-09-15 09:15 | DrKnS | Note Added: 0017165 | |
2021-09-15 09:17 | 2useven10 | Note Added: 0017166 | |
2021-09-15 09:28 | emusic | Note Added: 0017167 | |
2021-09-15 09:29 | DrKnS | Note Added: 0017168 | |
2021-09-15 09:32 | 2useven10 | Note Added: 0017169 | |
2021-09-15 10:36 | 2useven10 | Note Added: 0017170 | |
2021-09-15 10:37 | 2useven10 | Note Edited: 0017170 | View Revisions |
2021-09-15 10:37 | 2useven10 | Note Edited: 0017169 | View Revisions |
2021-09-15 17:59 | DrKnS | Note Added: 0017171 | |
2021-09-15 18:00 | DrKnS | Assigned To | => 2useven10 |
2021-09-15 18:00 | DrKnS | Status | new => feedback |