Архив с длинным именем файла внутри – unarchiver достигает предела файловой системы и не работает

У меня есть unarchiver, который принимает имя архива и имя каталога, а также выгружает все файлы из этого архива в этот каталог. Нет других параметров командной строки. Тем не менее, кто-то заархивировал файл в архиве, который я ищу для распаковки, с 500-ичными символами в имени файла, и теперь эта программа терпит неудачу, когда она попадает в этот файл (практически все файловые системы имеют предел 256). Какой у меня вариант, если не изменить исходный код и перекомпилировать unarchiver?

Я должен установить что-то в качестве каталога, в котором будут записываться файлы, которые записывает unarchiver, и выгружать их в другом месте – возможно, даже как один большой файл. Это не должно посылать сообщения об ошибках, даже если некоторая запись действительно закончилась неудачей.

Я попытался установить каталог как файл, однако этот каталог должен иметь базовую файловую систему, а затем он имеет те же ограничения, что и исходная FS.

Я также попытался использовать канал, но после него не может быть аргументов (например, /pipe/reallylongfilename ). Что-то вроде этого возможно?

Архив – .zim . Я использую инструмент zimdump из библиотеки OpenZim.

Если вы знаете это очень длинное имя, вы можете попробовать отредактировать его внутри архива, используя hex-редактор (или sed ?). Работайте с копией, если вам нужно начинать с нуля.

Пусть пример filename будет very-long-filename . Разумные углы атаки:

  • very/long/filename ,
  • very//////filename ,
  • very0long-filename где 0 указывает символ NULL ( 0x00 ),
  • very00000000000000 ( 0 как указано выше).

В общем случае нецелесообразно удалять символы (что делает архив меньше). Он изменяет важные смещения внутри архива и, вероятно, испортит его.

Я сделал тест с .zip файлом. Я признаю, что мое very-long-filename не было слишком длинным. Мне удалось сделать это короче, и, возможно, эти методы будут работать и для слишком длинных имен. В моем тесте мне пришлось отредактировать два фрагмента файла, потому что каждое имя файла в .zip хранилось дважды .

Вы использовали слово «zipped», но четко не указали, что такое ваш архив. Как бы то ни было, я надеюсь, что он сохранит имена файлов в текстовом виде, и вам удастся их редактировать. Удачи.