Opened 4 years ago

Closed 4 years ago

Last modified 4 years ago

#514 closed ожидается проверка (задача сдана)

HW #1

Reported by: smirnov.ilya Owned by: Дмитрий Свиридкин
Component: HW #1 (BMP) Version: 3.0
Keywords: Cc:

Description


Change History (13)

comment:1 Changed 4 years ago by Дмитрий Свиридкин

Owner: changed from Дмитрий Свиридкин to smirnov.ilya
Type: ожидается проверкаожидаются исправления

Не дублируйте тикеты. Пишите в существующем.


Для неквадратных картинок:
=================================================================
==9010==ERROR: AddressSanitizer?: stack-buffer-overflow on address 0x7ffdaa28af31 at pc 0x7f8efa11e4dd bp 0x7ffdaa28aee0 sp 0x7ffdaa28a688
READ of size 2 at 0x7ffdaa28af31 thread T0

#0 0x7f8efa11e4dc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x694dc)
#1 0x557b76062d54 in save_bmp (/home/dmis/DATA/WORKSPACE/cpp-labs/hw_01/check/hw_1/bin/hw_1+0x9d54)
#2 0x557b76060858 in main (/home/dmis/DATA/WORKSPACE/cpp-labs/hw_01/check/hw_1/bin/hw_1+0x7858)
#3 0x7f8ef9588b6a in libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x26b6a)
#4 0x557b76060259 in _start (/home/dmis/DATA/WORKSPACE/cpp-labs/hw_01/check/hw_1/bin/hw_1+0x7259)

Address 0x7ffdaa28af31 is located in stack of thread T0 at offset 33 in frame

#0 0x557b76062645 in save_bmp (/home/dmis/DATA/WORKSPACE/cpp-labs/hw_01/check/hw_1/bin/hw_1+0x9645)

This frame has 2 object(s):

[32, 33) 'null_for_padding' <== Memory access at offset 33 overflows this variable
[96, 136) 'bmp_file'

HINT: this may be a false positive if your program uses some custom stack unwind mechanism, swapcontext or vfork

(longjmp and C++ exceptions *are* supported)

SUMMARY: AddressSanitizer?: stack-buffer-overflow (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x694dc)
Shadow bytes around the buggy address:

0x100035449590: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x1000354495a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x1000354495b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x1000354495c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x1000354495d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

=>0x1000354495e0: 00 00 f1 f1 f1 f1[01]f2 f2 f2 f2 f2 f2 f2 00 00

0x1000354495f0: 00 00 00 f2 f2 f2 00 00 00 00 00 00 00 00 00 00
0x100035449600: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f1 f1
0x100035449610: f1 f1 00 00 00 00 00 f2 f2 f2 00 00 00 00 00 00
0x100035449620: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x100035449630: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Shadow byte legend (one shadow byte represents 8 application bytes):

Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
Shadow gap: cc

==9010==ABORTING

Зачем в вашей структуре bmp_file нужно последнее поле?

Магической константе 54 нужно дать имя

Почему функцию upload (почему upload?) должен вызывать пользовательский код?

зачем void(variable), если variable используется?

Не забывайте retrun EXIT_SUCCESS;

В bmp.h нужно оставить подключение только необходимых для описания интерфейса заголовков. Остальные нужно подключать в .c по необходимости.


8 + 5

comment:2 Changed 4 years ago by smirnov.ilya

Последнее поле - чтобы понимать,сколько байт дополнить нулями.

comment:3 Changed 4 years ago by smirnov.ilya

Опробовал уже десять неквадратных картиночек,везде всё ок,ничего не понимаю

Last edited 4 years ago by smirnov.ilya (previous) (diff)

comment:4 Changed 4 years ago by Дмитрий Свиридкин

Попробуйте вот эту (только сконвертировать не забудьте). Или любую другую размера 685х610
https://ibb.co/cQDpGT4

crop-rotate duke.bmp out.bmp 0 0 685 610


Проверялось для ревиизии:
r1983 | smirnov.ilya | 2019-11-21 22:52:07 +0300 (Чт, 21 ноя 2019) | 1 line

Last edited 4 years ago by Дмитрий Свиридкин (previous) (diff)

comment:5 Changed 4 years ago by smirnov.ilya

Такую нельзя ведь,у нее заголовок не 54 байтный

comment:6 Changed 4 years ago by Дмитрий Свиридкин

Обратите внимание, что на хостинге не формат bmp. А png. Вам нужна любая картинка такого размера в поддерживаемом формате bmp.
Размер заголовка никак от размера изображе
ния не зависит.

comment:7 Changed 4 years ago by smirnov.ilya

Существуют ли ограничения на длину строки?

comment:8 Changed 4 years ago by Дмитрий Свиридкин

Больше чем может поместиться в картинку точно можно не читать.
Читайте посимвольно.

comment:9 Changed 4 years ago by smirnov.ilya

Я имел ввиду длину строки в коде, это учитывается при оценивании стиля?

Last edited 4 years ago by smirnov.ilya (previous) (diff)

comment:10 Changed 4 years ago by Дмитрий Свиридкин

Есть два распространенных ограничения: 80 либо 120 символов.
Больше 120 символов в строке лучше не делать.

comment:11 Changed 4 years ago by smirnov.ilya

Owner: changed from smirnov.ilya to Дмитрий Свиридкин
Type: ожидаются исправленияожидается проверка
Version: 2.03.0

comment:12 Changed 4 years ago by Дмитрий Свиридкин

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

С падением ничего не поменялось

=================================================================
==26591==ERROR: AddressSanitizer?: stack-buffer-overflow on address 0x7ffc983d6f61 at pc 0x7fe2d3c134dd bp 0x7ffc983d6f00 sp 0x7ffc983d66a8
READ of size 2 at 0x7ffc983d6f61 thread T0

#0 0x7fe2d3c134dc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x694dc)
#1 0x55b8a6abe02f in save_bmp (/home/dmis/DATA/WORKSPACE/cpp-labs/hw_01/check/hw_01/bin/hw_1+0xa02f)
#2 0x55b8a6abba18 in main (/home/dmis/DATA/WORKSPACE/cpp-labs/hw_01/check/hw_01/bin/hw_1+0x7a18)
#3 0x7fe2d307db6a in libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x26b6a)
#4 0x55b8a6abb239 in _start (/home/dmis/DATA/WORKSPACE/cpp-labs/hw_01/check/hw_01/bin/hw_1+0x7239)

Address 0x7ffc983d6f61 is located in stack of thread T0 at offset 33 in frame

#0 0x55b8a6abda8b in save_bmp (/home/dmis/DATA/WORKSPACE/cpp-labs/hw_01/check/hw_01/bin/hw_1+0x9a8b)

This frame has 2 object(s):

[32, 33) 'zero' <== Memory access at offset 33 overflows this variable
[96, 128) 'bmp_file'

HINT: this may be a false positive if your program uses some custom stack unwind mechanism, swapcontext or vfork

(longjmp and C++ exceptions *are* supported)

SUMMARY: AddressSanitizer?: stack-buffer-overflow (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x694dc)
Shadow bytes around the buggy address:

0x100013072d90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x100013072da0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x100013072db0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x100013072dc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x100013072dd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

=>0x100013072de0: 00 00 00 00 00 00 00 00 f1 f1 f1 f1[01]f2 f2 f2

0x100013072df0: f2 f2 f2 f2 00 00 00 00 f3 f3 f3 f3 00 00 00 00
0x100013072e00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x100013072e10: f1 f1 f1 f1 00 00 00 00 f3 f3 f3 f3 00 00 00 00
0x100013072e20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x100013072e30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Shadow byte legend (one shadow byte represents 8 application bytes):

Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
Shadow gap: cc

==26591==ABORTING

Все так же при повороте целиком картинки 685х610


Зачем нужен pragma pack для стркутур из хедера? pixel и так трехбайтный и выравнен по 1, bmpfile в принципе не нужно выравнивать, вы его не читаете из сырых байтов.

Как-то неправильно, что функция сохранения картинки в файл неявно очищает из-под картинки память. А вдруг вы ею (картинкой) еще пользоваться будете?


8 + 7

comment:13 Changed 4 years ago by smirnov.ilya

Last edited 4 years ago by smirnov.ilya (previous) (diff)
Note: See TracTickets for help on using tickets.