Change History (3)

comment:1 Changed 4 years ago by Артур Гулецкий (huletski)

Owner: changed from Evgeny Linsky to Артур Гулецкий (huletski)
Status: newassigned

comment:2 Changed 4 years ago by Артур Гулецкий (huletski)

Type: ожидается проверкаожидаются исправления

Корректность

  • не обновляется поле, хранящее размер изображения, в заголовке генерируемого bmp-файла.
  • main.c:158. Размер выравнивания может быть больше sizeof(uint8_t), что приведет к чтению и записи случайных данных со стека. Это ошибка при работе с памятью.

Стиль

include/bmp.h

4: неясно зачем подключается string.h. Если из-за size_t, то лучше подключить stddef.h;
17,18: выглядят как внутренние функции модуля для обработки BMP файлов, их необязательно делать видимыми.

src/main.c

(opt) Дублирование логики освобождения памяти. Можно было бы написать ее в конце блока кода (обработка команды crop-rotate) и делать goto на эти инструкции в случае досрочного завершения работы функции из-за обнаруженных ошибок.

src/bmp.c

21: что значит 54?
31: вызывать free(NULL) - ок, т.ч. проверки избыточны;
71: отсутствует проверка успешности выполнения операции чтения;
73: определите структуры, описывающие заголовки BMP с отключенным выравниванием, читайте из файла данные непосредственно в эти структуры, обращайтесь к полям структур для доступа к полям заголовков, а не используйте разбор заголовков вручную из сырых данных по hardcoded смещениям (последнее делает код более сложным для модификации и понимания). Пример:

#pragma pack(push, 1)
struct Foo {
  uint16_t bar;
  uint8_t baz;
};
#pragma pack(pop)

struct Foo foo;
assert(fread(&foo, sizeof foo, 1, in_bmp_file) == 1);
foo.baz; // доступ к данным заголовка по смещению 2/полю “baz”

79: s/offset/padding_sz
91: fseek может завершиться с ошибкой, нужно проверять возвращаемое значение;
107: перед перенесенными частями stament’a обычно добавляют отступы;
80, 142: дублирование нетривиального кода, нужно вынести в функцию; использование тернарного оператора сделало бы код компактнее;

Баллы: корректность 16, стиль 5.

comment:3 Changed 4 years ago by Артур Гулецкий (huletski)

Resolution: задача сдана
Status: assignedclosed

Дедлайн пришел.

Note: See TracTickets for help on using tickets.