Fix filename buffer overflow in create_filename
FILE_NAME is a fixed 48-byte buffer, but the loop copying the filename parsed from the download URL had no length check, so a filename longer than 48 characters would overflow into adjacent variables (FILE_INI, DIR_zifi, DIR_download, DIR_date). Bound the copy loop to 48 bytes. Verified on hardware via a temporary diagnostic test (since removed): folder/file creation with long names and write+read-back through the FAT32 driver both work correctly, and downloads/<date> is confirmed write-only (playback/viewing always reads from memory, never disk). Documented the fix in README.md.
This commit is contained in:
@@ -48,7 +48,8 @@ AT+CIPSNTPTIME? — получить текущее врем
|
||||
**Мелкие исправления:**
|
||||
- перевёл обращение к порту `#EFF7` (общий системный регистр — управляет не только доступом к часам, но и видеорежимом/turbo/кэшем) на read-modify-write вместо прямой перезаписи всего байта, чтобы не сбивать остальные настройки;
|
||||
- исправил баг в разборе двузначного GMT-смещения из `zifi.ini` (например `+10`) — были перепутаны местами разряды;
|
||||
- теперь DMA-очистка под индикатор громкости дожидается завершения перед тем, как CPU начинает рисовать поверх той же области (была гонка записи).
|
||||
- теперь DMA-очистка под индикатор громкости дожидается завершения перед тем, как CPU начинает рисовать поверх той же области (была гонка записи);
|
||||
- исправил переполнение буфера имени файла (`create_filename`): при скачивании имя файла из ссылки копировалось в 48-байтный буфер без проверки длины, и если оно было длиннее — переполнение затирало соседние переменные (`zifi.ini`, имена служебных папок) прямо в памяти. Теперь копирование корректно обрезается на 48 символах. Проверено на железе: создание папки и файла с длинными именами (в т.ч. ровно 48 символов) и последующее чтение содержимого — всё работает штатно, никакой драйверной обрезки до 8 символов нет.
|
||||
|
||||
**Известная нерешённая мелочь:** курсор мыши (аппаратный спрайт TSU) обрывается по фиксированной строке экрана прямо над нижней панелью управления — похоже на границу, завязанную на тайминг переключения видеорежима или на аппаратный бордюр, а не на что-то, что двигается вместе с содержимым панели. Я не нашёл способ поправить это без риска сломать что-то ещё, оставил как есть.
|
||||
|
||||
|
||||
Binary file not shown.
@@ -157,17 +157,18 @@ create_filename ; and check extension for scl scr sxg others
|
||||
dec hl
|
||||
jr 1b
|
||||
1
|
||||
inc hl
|
||||
inc hl
|
||||
ld de,FILE_NAME ; file_name create
|
||||
ld b,48 ; FILE_NAME is exactly 48 bytes - never write past it
|
||||
2 ld a,(hl)
|
||||
cp ' '
|
||||
jr z,1f
|
||||
ld (de),a
|
||||
inc hl
|
||||
inc de
|
||||
jr 2b
|
||||
djnz 2b ; ran out of room - stop here and null-terminate below
|
||||
|
||||
1
|
||||
1
|
||||
xor a
|
||||
ld (de),a
|
||||
|
||||
|
||||
Reference in New Issue
Block a user