FreeArc Fork

toolame

Старожил
Проверенный
у меня вопрос по 4х4
если внешний упаковщик фэлит (нет выходного файла), то записывается входящий, если отсутствует строка header = 0
так?
т.е. в поток записывается дополнительный байт, два
могут ли они влиять на распаковку?
а то у меня сыпятся CRC

внешний упаковщик:
Код:
[External compressor:preJPG047]
packcmd = cmd /Q /C precomp047 -cn -t+J -d0 -o$$arcpackedfile$$.pcf $$arcdatafile$$.tmp || DEL /Q $$arcpackedfile$$.pcf
unpackcmd = precomp047 -o$$arcdatafile$$.tmp -r $$arcpackedfile$$.pcf
datafile = $$arcdatafile$$.tmp
packedfile = $$arcpackedfile$$.pcf
без 4х4 все отлично
 

Shegorat

Lord of Madness
Администратор
т.е. в поток записывается дополнительный байт, два
могут ли они влиять на распаковку?
а то у меня сыпятся CRC
Вообще могут.
4x4 плохо работает с "расширяющими" алгоритмами. Он выделяет 2 буфера фиксированного размера на каждый поток. И естественно ожидает получить в выходном буфере объём данных не больше входного.
Соответственно доп байт, который дописывается, если precomp свалился, вытесняет данные из буфера и потом при распаковке выдает ошибку
 

Shegorat

Lord of Madness
Администратор
  • Добавил поддержку опций лимитирования кол-ва памяти/потоков для CLS (CLS должен уметь поддерживать эти опции, см. cls.h)
  • Добавил опцию лимитирования кол-ва потоков при распаковке -ldt{Threads}, передается в unarc.dll/exe
  • Пофиксил некоторые ошибки

P.S. Для FA соответственно будут опции -ldt/-lct, когда добавлю обработчик - соберу

@sergey3695 попробуй эту версию dll
 

Вложения

sergey3695

Ветеран
Модератор
@Shegorat, не пустой файл с именем архива - проблема не пропала (выбивает бесконечно fa_callback(error, -14, 0, ERROR: this is not FreeArc archive or this archive is corrupt)). с пустым файлом написало fa_callback(error, -14, 0, ERROR: file is too small for FA archive) и выпало в APPCRASH (unarc.exe с пустым не падает). Из сторонних библиотек используется CallBackCtrl.dll только, скрипт ISFreeArcExtract_v.4.3 WIP.
Код:
Сигнатура проблемы:
  Имя события проблемы:    APPCRASH
  Имя приложения:    FreeArc_Example-Ext.tmp
  Версия приложения:    51.1052.0.0
  Отметка времени приложения:    506a75b5
  Имя модуля с ошибкой:    unarc.dll
  Версия модуля с ошибкой:    0.0.0.0
  Отметка времени модуля с ошибкой:    60e8bd67
  Код исключения:    c0000005
  Смещение исключения:    000017cc
  Версия ОС:    6.3.9600.2.0.0.256.48
  Код языка:    1049
  Дополнительные сведения 1:    5861
  Дополнительные сведения 2:    5861822e1919d7c014bbb064c64908b2
  Дополнительные сведения 3:    9d53
  Дополнительные сведения 4:    9d539ab2d38cfad867f683ba4be72a2d

Ознакомьтесь с заявлением о конфиденциальности в Интернете:
  http://go.microsoft.com/fwlink/?linkid=280262

Если заявление о конфиденциальности в Интернете недоступно, ознакомьтесь с его локальным вариантом:
  C:\Windows\system32\ru-RU\erofflps.txt
 

sergey3695

Ветеран
Модератор
@Shegorat, с пустыми файлами теперь не падает. Спасибо. Осталось https://gitlab.com/Shegorat/freearc/-/issues/1 исправить и будет сказка.
Код:
Сигнатура проблемы:
  Имя события проблемы:    APPCRASH
  Имя приложения:    test_setup.tmp
  Версия приложения:    51.1052.0.0
  Отметка времени приложения:    506a75b5
  Имя модуля с ошибкой:    unarc.dll
  Версия модуля с ошибкой:    0.0.0.0
  Отметка времени модуля с ошибкой:    60ec9037
  Код исключения:    c0000005
  Смещение исключения:    00020d87
  Версия ОС:    6.3.9600.2.0.0.256.48
  Код языка:    1049
  Дополнительные сведения 1:    5861
  Дополнительные сведения 2:    5861822e1919d7c014bbb064c64908b2
  Дополнительные сведения 3:    9d53
  Дополнительные сведения 4:    9d539ab2d38cfad867f683ba4be72a2d
 

sergey3695

Ветеран
Модератор
@Sergei1981, распаковал без проблем архив с паролем упакованный srep:m5f:l2048+lolz:d1024. вы что-то делаете не так.
Безымянный.jpgБезымянный.jpg
@Shegorat, тебе б уже написали, если это не распаковывалось, ну тут чисто файлы в скрипт не добавил человек из-за этого проблема небось. Лучше issues/1 погляди, там ни процесс убить, ничего не сделать - просто падает приложение с архивом залитым.
 
Последнее редактирование:

Sergei1981

Новичок
параметры lolz -dt1 -dtp1 -dto1 -dtm1 -dtw1 -dtd1 -mtt1 -mt4 -d256m -tt4 -oh14 -fba4096 -mc1023 -bc8 -blr8 -bm4
параметры srep -a1 -m5f -l512

не каких ошибок просто папка пустая
 

Вложения

sergey3695

Ветеран
Модератор
@Sergei1981, скорее всего какая-то cls отличная от lolz и srep сбоит, убери из папки. распаковал архив unarc.exe свой, всё ок.
 

sergey3695

Ветеран
Модератор
@Shegorat, с файлом, который там прикреплен падает распаковка.
C++:
int call IS_callback(int CurrentTasks, char *what, int sizeMB, int sizeArc, char *str)
what == "read" и sizeMB == "0" дважды возвращает, потом процесс падает.
Код:
Сигнатура проблемы:
  Имя события проблемы:    APPCRASH
  Имя приложения:    test_setup.tmp
  Версия приложения:    51.1052.0.0
  Отметка времени приложения:    506a75b5
  Имя модуля с ошибкой:    unarc.dll
  Версия модуля с ошибкой:    0.0.0.0
  Отметка времени модуля с ошибкой:    60ec9037
  Код исключения:    c0000005
  Смещение исключения:    00020d87
  Версия ОС:    6.3.9600.2.0.0.256.48
  Код языка:    1049
  Дополнительные сведения 1:    5861
  Дополнительные сведения 2:    5861822e1919d7c014bbb064c64908b2
  Дополнительные сведения 3:    9d53
  Дополнительные сведения 4:    9d539ab2d38cfad867f683ba4be72a2d
проверка нужна. можно добавить проверку, чтобы корректно завершалось когда "read" возвращает "0"?
куда уж подробнее, не знаю. 🙃
 

Shegorat

Lord of Madness
Администратор
Вообще 0 это вполне корректный результат, и в целом возможен. К примеру работа в stdin/stdout режиме. Когда данные пишутся.читаются асинхронно.

А там краш из-за того, что алгоритм пытается получить доступ к области памяти, которая приложению недоступна
 
Последнее редактирование:

sergey3695

Ветеран
Модератор
@Shegorat, с последней версией появилась проблема с распаковкой (unarc.dll, unarc.exe). для примера создал архив с -m0 и паролем, ошибки не видно, но файл не распаковывает.
пароль на архив 1234567
 

Вложения

Shegorat

Lord of Madness
Администратор
@sergey3695,ок, спасибо. Можно сразу писать в issues на gitlab ;)
 
Сверху