Добро пожаловать в новый чудный мир: C без знаний C

Добро пожаловать в новый чудный мир: C без знаний C

Кажется я превратился в тролля. Но автор заслужил.

Мой комментарий к статье "Операционная Система на C без знаний C".

Я так понимаю, речь идёт об этом проекте OS. Мдя. Ну что же, автору предстоит узнать ещё много о языке С. Например, что такое выход за границу буфера.

void terminal_write_hex(uint64_t hex_num) { uint64_t index_buffer = 0; char buffer[sizeof(uint64_t)]; if (hex_num == 0x0) { terminal_write("0x0"); return; } terminal_write("0x"); while (hex_num > 0) { uint64_t digit = hex_num % 16; if (digit >= 10) { digit = digit - 10; buffer[index_buffer] = 'A'+digit; }else { buffer[index_buffer] = '0' + digit; } hex_num = hex_num / 16; index_buffer++; } ....

Какой милый баг. Посмотрите на размер буфера: не учитывается, что один байт превращается в два символа. Интересные времена "безопасного ПО" настают. Простите за едкость комментария, но не удержался, увидев проект автора:

Safe Life System

Наш проект — это платформа для обеспечения и сохранения безопасности информации в цифровой среде, а также для развития независимой IT-экосистемы.

Или функция сравнения строк, где забыта проверка терминального нуля.

uint64_t kstrncmp(char *str1, char *str2, uint64_t len){ uint64_t index_str = 0; uint64_t different_char = 0; while (index_str < len) { if (str1[index_str] != str2[index_str]) { different_char++; } index_str++; } return different_char; }
1