В DC++ клиентах найдена проблема.
Пример файла TTH = 7RNOHVHMMYX6TMHUKBXZ2I42MYCCVZSTNRY273I
он у некоторых пользователей имеет имя
Носов Евгений, Павлов Сергей, Пидоренко Игорь, Пищенко Виталий, Пухов Михаил, Пьянкова Таисия, Силецкий Александр, Сыч Евгений, Ткаченко Игорь, Федотов Дмитрий, Чарушников Олег, Шалин Анатолий - Румбы фантастики. 1988 год. Том II.fb2
После беглого просмотра скрина ошибки SCALOlaz выдал прикольную версию - виновен третий писатель этой коллекции электронных книг :) ... но ошибка оказалось совсем в другом
Windows накладывает ограничение на максимальную длину пути= 260 (MAX_PATH)
Длина этого имени файла 233 символа.
Смотрим на алгоритм получения временного файла для закачки в оригинальном DC++
данный код без изменений мигрировал во все дочерние клиенты.
dcplusplus\dcpp\QueueItem.cpp
namespace {
const string TEMP_EXTENSION = ".dctmp";
string getTempName(const string& aFileName, const TTHValue& aRoot) {
string tmp(aFileName);
tmp += "." + aRoot.toBase32();
tmp += TEMP_EXTENSION;
return tmp;
}
}
он приводит к тому, что итоговый размер имени файла становится
на 46 символов длиннее т.к. к нему приписывает TTH, точка и временное расширение .dctmp
а это приводит к гарантированной ошибке открытия временного файла
в классе SharedFileStream 233 + 44 > 260
В ветках r5xx и r4xx данная проблема уже исправлена.
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий