Opened 4 years ago

Closed 4 years ago

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

HW #01

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

Description


Change History (4)

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

Version: 1.02.0

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

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

Битый заголовк. 4й и 36й байты.

Дла неквадратной картинки:

==8060==ERROR: AddressSanitizer?: heap-buffer-overflow on address 0x622000002c10 at pc 0x563db4e1de43 bp 0x7ffef9315cf0 sp 0x7ffef9315ce0
READ of size 8 at 0x622000002c10 thread T0

#0 0x563db4e1de42 in rotate_image src/bmp.c:70
#1 0x563db4e1ebb7 in main src/main.c:35
#2 0x7ff83c6fab6a in libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x26b6a)
#3 0x563db4e1d1b9 in _start (/home/dmis/DATA/WORKSPACE/cpp-labs/hw_01/check/hw_01/hw_01+0x11b9)

0x622000002c10 is located 0 bytes to the right of 4880-byte region [0x622000001900,0x622000002c10)
allocated by thread T0 here:

#0 0x7ff83c9cb448 in malloc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x10c448)
#1 0x563db4e1e0e9 in crop_image src/bmp.c:81
#2 0x563db4e1eba7 in main src/main.c:33
#3 0x7ff83c6fab6a in libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x26b6a)

SUMMARY: AddressSanitizer?: heap-buffer-overflow src/bmp.c:70 in rotate_image
Shadow bytes around the buggy address:

0x0c447fff8530: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0c447fff8540: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0c447fff8550: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0c447fff8560: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0c447fff8570: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

=>0x0c447fff8580: 00 00[fa]fa fa fa fa fa fa fa fa fa fa fa fa fa

0x0c447fff8590: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c447fff85a0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c447fff85b0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c447fff85c0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c447fff85d0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa

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

==8060==ABORTING


Код, обновляющий заголовк, дублируется

Количество аргументов нужно проверять.


7 + 8

comment:3 Changed 4 years ago by savrasov.mikhail

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

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

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

Для картинки 610x685
crop-rotate 298 503 387 107

=================================================================
==25622==ERROR: AddressSanitizer?: heap-buffer-overflow on address 0x61d0000c748a at pc 0x55a72496dcef bp 0x7ffdf90c9ae0 sp 0x7ffdf90c9ad0
READ of size 3 at 0x61d0000c748a thread T0

#0 0x55a72496dcee in crop_image src/bmp.c:113
#1 0x55a72496de02 in crop_rotate src/main.c:15
#2 0x55a72496e703 in main src/main.c:113
#3 0x7fb43f49cb6a in libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x26b6a)
#4 0x55a72496c259 in _start (/home/dmis/DATA/WORKSPACE/cpp-labs/hw_01/check/hw_01/hw_01+0x2259)

0x61d0000c748a is located 0 bytes to the right of 2058-byte region [0x61d0000c6c80,0x61d0000c748a)
allocated by thread T0 here:

#0 0x7fb43f76d448 in malloc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x10c448)
#1 0x55a72496c614 in load_image src/bmp.c:27
#2 0x55a72496dde7 in crop_rotate src/main.c:13
#3 0x55a72496e703 in main src/main.c:113
#4 0x7fb43f49cb6a in libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x26b6a)

SUMMARY: AddressSanitizer?: heap-buffer-overflow src/bmp.c:113 in crop_image
Shadow bytes around the buggy address:

0x0c3a80010e40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0c3a80010e50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0c3a80010e60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0c3a80010e70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0c3a80010e80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

=>0x0c3a80010e90: 00[02]fa fa fa fa fa fa fa fa fa fa fa fa fa fa

0x0c3a80010ea0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c3a80010eb0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c3a80010ec0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c3a80010ed0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0c3a80010ee0: 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

==25622==ABORTING


Заголовки битые. Перепутана нумерация строк или столбцов (возможно одновременно). Точно не просто строк -- результаты (картинки) сильно отличаются от того, что получается при перепутанной нумерации строк.


Вы читаете картинку блоками по N * sizeof(Pixel) байт, а пишете по одному байту. Почему бы не писать также по строке?

Для очистки памяти из-под изображения лучше сделать функцию. Тем более у вас этот код в трех местав встречается.

Корректность бонуса не проверяется, поскольку не работает основной функционал.

8.5 + 8 + 3

Note: See TracTickets for help on using tickets.