e8tools / tool1cd

Инструмент для работы с файлами 1CD за авторством Валерия Агеева с адаптацией от сообщества
GNU General Public License v3.0
110 stars 29 forks source link

Неявное приведение типов размера данных при распаковке #28

Closed ava57r closed 6 years ago

ava57r commented 7 years ago

Как-то все это выглядет не правильно srcSize - типа uintmax_t src->GetSize() возвращает тип int64_t src->Read(srcBuf, srcSize) принимает 2-м параметром тип int64_t

ctool1cd/UZLib.cpp

void ZInflateStream(TStream* src, TStream* dst)
{
    ...
    uintmax_t srcSize;
...
        srcSize = src->GetSize();         // определяем размер данных
        src->Read(srcBuf, srcSize);  // читаем из потока в буфер данные
strm.avail_in = srcSize;
ava57r commented 7 years ago

Для для задания размерной величины предлагаю тип size_t, его используют стандартные контейнеры,да и вообще рекомендуют для этих целей.

dmpas commented 7 years ago

int64_t был введён в SystemClasses только согласно документации от Embarcadero. От SystemClasses мы откажемся, потому сейчас это не принципиально. В остальных местах нужно попутно приводить к size_t.

ava57r commented 7 years ago

Кто же у них пишет документацию? Рекомендуют тип со знаком для указания размера списка... Надо планировать замену dynamic array.

dmpas commented 7 years ago

Наследие паскаля - там не особо-то принято пользоваться беззнаковыми типами.

ava57r commented 6 years ago

Разрабы C++ Builder нормальные парни https://www.viva64.com/ru/t/0072/ - Бесконечный цикл В Qt тоже используют знаковые типы.

ava57r commented 6 years ago

кода обозначенного в задаче уже нет в UZip.cpp