View Issue Details

IDProjectCategoryView StatusLast Update
0003896Far ManagerViewerpublic2021-09-15 19:00
Reporteremusic Assigned To2useven10  
PrioritynormalSeverityminorReproducibilityalways
Status feedbackResolutionopen 
Platformx86OSWindows 
Product Version3.0 
Summary0003896: ArcLite:PE сваливается в Base64 на многих EXE
DescriptionС некоторых пор (минимум с версии 5858), ArcLite:PE стал сваливаться в Base64 на многих EXE, как старых, так и новых. Например, такое поведение вызывают почти все EXE из комплекта MS VC, как последних версий, так и древних.

С DLL такой проблемы не отмечается.

Ночная 5886 ведет себя так же.
Steps To ReproduceНажать Ctrl-PgDn на прилагаемом dumpbin.exe, или различных других EXE/PE.
TagsArcLite;PE;EXE;Base64
Build

Activities

emusic

2021-09-10 12:13

reporter  

dumpbin.7z (7,617 bytes)

2useven10

2021-09-14 18:34

developer   bugnote:0017160

PeHandler 7zip возвращает "PADDINGPADDING..." из хвоста ресурсов PE файла как основной поток.
И он распознаётся как BASE64, но не распаковывается.
Самое простое отсекать маленький main для формата PE, у себя проверил - работает.
Доступ к коммитам у меня отвалился (логин по паролю отменили), надо восстанавливать...

DrKnS

2021-09-14 18:51

administrator   bugnote:0017161

отсекать маленький main для формата PE
А 7zfm что в этом случае делает?

2useven10

2021-09-15 02:19

developer   bugnote:0017162

7z пытается открыть этот хвост как Dmg архив (не знаю пока почему не Base64 как у arclite) и обламывается.

2useven10

2021-09-15 06:47

developer   bugnote:0017163

Разница в итоге в том, что arclite открывает "PADDING...' как архив (если число букв кратно 3 - успешно), а 7z не считает это архивом.

emusic

2021-09-15 10:08

reporter   bugnote:0017164

Это началось не так давно (я обычно обновляю FAR с задержкой в 2-3 месяца от релиза). В PE-файлы мне часто приходится лазить, раньше такого не было.

DrKnS

2021-09-15 10:15

administrator   bugnote:0017165

Еще к размышлению:
- а зачем мы вообще пытаемся угадать, чего хочет пользователь и пытаемся войти во вложенные архивы?
Это вроде бы не унаследованное свойство 7z, а осознанное действие.

Проблема в том, что если этот AI угадал, то экономится аж одно нажатие, но если не угадал, как здесь, то с этим уже ничего не сделаешь, надо выходить и входить вычурно, через F11.

2useven10

2021-09-15 10:17

developer   bugnote:0017166

Base64Handler появился у 7zip в 21.02.
Поскольку у 7zip такой проблемы нет, всё решаемо.

emusic

2021-09-15 10:28

reporter   bugnote:0017167

а зачем мы вообще пытаемся угадать, чего хочет пользователь и пытаемся войти во вложенные архивы?
Ну, в целом это удобно, я и сам бы предпочел автоматическое открывание архива вместо формата PE, поскольку PE мне интересен главным образом в обычных EXE. Но Base64 в PE - это нонсенс, так что имеет смысл отфильтровать этот вариант безусловно.

DrKnS

2021-09-15 10:29

administrator   bugnote:0017168

А, ну да, SFX же.

2useven10

2021-09-15 10:32

developer   bugnote:0017169

Last edited: 2021-09-15 11:37

View 2 revisions

У кодеков появился новый флаг.
bool Flags_ByExtOnlyOpen() const { return (Flags & NArcInfoFlags::kByExtOnlyOpen) != 0; }
Base64 единственный у которого он выставлен, надо просто при наличии этого флага применять кодек только если раширение нужное (.b64, .base64).

2useven10

2021-09-15 11:36

developer   bugnote:0017170

Last edited: 2021-09-15 11:37

View 2 revisions

С доступом сейчас времени нет возиться, вот изменения:

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));
     }
   });

DrKnS

2021-09-15 18:59

administrator   bugnote:0017171

https://github.com/FarGroup/FarManager/commit/16c896ae337e35becb3cad6cfd9fb02d56aba6b2

Issue History

Date Modified Username Field Change
2021-09-10 12:13 emusic New Issue
2021-09-10 12:13 emusic Tag Attached: ArcLite;PE;EXE;Base64
2021-09-10 12:13 emusic File Added: dumpbin.7z
2021-09-14 18:34 2useven10 Note Added: 0017160
2021-09-14 18:51 DrKnS Note Added: 0017161
2021-09-15 02:19 2useven10 Note Added: 0017162
2021-09-15 06:47 2useven10 Note Added: 0017163
2021-09-15 10:08 emusic Note Added: 0017164
2021-09-15 10:15 DrKnS Note Added: 0017165
2021-09-15 10:17 2useven10 Note Added: 0017166
2021-09-15 10:28 emusic Note Added: 0017167
2021-09-15 10:29 DrKnS Note Added: 0017168
2021-09-15 10:32 2useven10 Note Added: 0017169
2021-09-15 11:36 2useven10 Note Added: 0017170
2021-09-15 11:37 2useven10 Note Edited: 0017170 View Revisions
2021-09-15 11:37 2useven10 Note Edited: 0017169 View Revisions
2021-09-15 18:59 DrKnS Note Added: 0017171
2021-09-15 19:00 DrKnS Assigned To => 2useven10
2021-09-15 19:00 DrKnS Status new => feedback