Как и Cppcheck: (error) Buffer is accessed out of bounds.
, как и AddressSanitizer компилятора:
Скрытый текст
=================================================================
==21454==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x60200000effd at pc 0x7f7182fd729b bp 0x7ffe039c1940 sp 0x7ffe039c10e8
WRITE of size 14 at 0x60200000effd thread T0
#0 0x7f7182fd729a (/lib64/libasan.so.3+0x5f29a)
#1 0x4008d1 in main /tmp/c.c:9
#2 0x7f7182bd2400 in __libc_start_main (/lib64/libc.so.6+0x20400)
#3 0x4007d9 in _start (/tmp/a.out+0x4007d9)
0x60200000effd is located 0 bytes to the right of 13-byte region [0x60200000eff0,0x60200000effd)
allocated by thread T0 here:
#0 0x7f718303ee60 in malloc (/lib64/libasan.so.3+0xc6e60)
#1 0x4008b7 in main /tmp/c.c:8
#2 0x7f7182bd2400 in __libc_start_main (/lib64/libc.so.6+0x20400)
SUMMARY: AddressSanitizer: heap-buffer-overflow (/lib64/libasan.so.3+0x5f29a)
Shadow bytes around the buggy address:
0x0c047fff9da0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c047fff9db0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c047fff9dc0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c047fff9dd0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c047fff9de0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
=>0x0c047fff9df0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa 00[05]
0x0c047fff9e00: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c047fff9e10: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c047fff9e20: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c047fff9e30: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c047fff9e40: 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
Heap right redzone: fb
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack partial redzone: f4
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
==21454==ABORTING
Сейчас, к счастью, много инструментов, позволяющих улучшить качество кода.
P.S. А вот cppcheck не поймал, даже если индекс явно 16 влепить.
Возможно баг, или информации анализатору не хватает. Вообще он такое ловит:
(error) Array 's.a[15]' accessed at index 16, which is out of bounds.
Насчёт sanitizers — отличные инструменты. Замедляют программу значительно меньше valgrind, а находят зачастую больше проблем, хотя бы за счёт большего объёма информации о программе. Пересобирать надо, да, но оно того стоит.
Выскажусь и за Fedora. Пользуюсь около двух лет, отличный дистрибутив. Свежие пакеты, при этом вполне себе стабильна (несмотря на байки в интернетах). Репозиторий не слишком большой по сравнению с некоторыми, но особенных проблем не испытывал, необходимое собирается без проблем. Хотя из коробки GNOME, кеды юзабельны (пару раз что-то с иконками происходило после обновления, но потом возвращалось на место).
Не так давно переехал на Tumbleweed, очень нравится система. KDE по умолчанию и готовят его отлично.
Про тот же Neon буквально сегодня читал, что опакечивают не слишком удачно — попытка удалить vlc пытается снести полсистемы.
А почему именно ps+grep? Мне кажется, добавить один флаг pgrep проще, чем писать конвейер. Да и есть этот pgrep даже в busybox (разве что, флаг -a там отстутствует, иногда не хватает).
С триальной (истёкшей) лицензией тоже не действует:
./pvs-studio-6.11.20138.1-x86_64/bin/pvs-studio-analyzer analyze -l PVS-Studio.lic
[100%] Analyzing: /home/user/malloc.c
Your license for PVS-Studio has expired. You may renew your license at http://www.viva64.com/en/renewal/.
Analysis finished in 0:00:00.02
Если Вы используете PVS-Studio for Linux, то сразу переходите ко второму шагу, файл с лицензией вам не понадобится.
Не подскажете, что не так делаю?
$ cat malloc.c
// This is an open source non-commercial project. Dear PVS-Studio, please check it.
// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
#include <stdlib.h>
int main(int argc, char **argv)
{
(void)argv;
int *i = malloc(argc);
return i[0];
}
$ ./pvs-studio-6.11.20138.1-x86_64/bin/pvs-studio-analyzer trace -- gcc malloc.c -o malloc
$ ./pvs-studio-6.11.20138.1-x86_64/bin/pvs-studio-analyzer analyze
[100%] Analyzing: /home/user/malloc.c
Please request a trial license from our support at support@viva64.com.
Analysis finished in 0:00:00.05
$ ./pvs-studio-6.11.20138.1-x86_64/bin/pvs-studio-analyzer analyze -l malloc.c
[100%] Analyzing: /home/user/malloc.c
License information is incorrect. Please check your registration data or contact Customer Support at support@viva64.com
Analysis finished in 0:00:00.02
Статья какая-то сумбурная, больше похожа на отзыв. А вот книга и серия курсов очень нравится, полезные навыки прививает.
Ад какой-то. Кажется, что с каждым годом всё больше подобных трюков применяют некоторые сайты.
Насчёт ссылки в заключении — я делал перевод первой статьи, здесь можно почитать.
(error) Buffer is accessed out of bounds.
, как и AddressSanitizer компилятора:
=================================================================
==21454==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x60200000effd at pc 0x7f7182fd729b bp 0x7ffe039c1940 sp 0x7ffe039c10e8
WRITE of size 14 at 0x60200000effd thread T0
#0 0x7f7182fd729a (/lib64/libasan.so.3+0x5f29a)
#1 0x4008d1 in main /tmp/c.c:9
#2 0x7f7182bd2400 in __libc_start_main (/lib64/libc.so.6+0x20400)
#3 0x4007d9 in _start (/tmp/a.out+0x4007d9)
0x60200000effd is located 0 bytes to the right of 13-byte region [0x60200000eff0,0x60200000effd)
allocated by thread T0 here:
#0 0x7f718303ee60 in malloc (/lib64/libasan.so.3+0xc6e60)
#1 0x4008b7 in main /tmp/c.c:8
#2 0x7f7182bd2400 in __libc_start_main (/lib64/libc.so.6+0x20400)
SUMMARY: AddressSanitizer: heap-buffer-overflow (/lib64/libasan.so.3+0x5f29a)
Shadow bytes around the buggy address:
0x0c047fff9da0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c047fff9db0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c047fff9dc0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c047fff9dd0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c047fff9de0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
=>0x0c047fff9df0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa 00[05]
0x0c047fff9e00: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c047fff9e10: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c047fff9e20: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c047fff9e30: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c047fff9e40: 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
Heap right redzone: fb
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack partial redzone: f4
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
==21454==ABORTING
Сейчас, к счастью, много инструментов, позволяющих улучшить качество кода.
Возможно баг, или информации анализатору не хватает. Вообще он такое ловит:
(error) Array 's.a[15]' accessed at index 16, which is out of bounds.
Насчёт sanitizers — отличные инструменты. Замедляют программу значительно меньше valgrind, а находят зачастую больше проблем, хотя бы за счёт большего объёма информации о программе. Пересобирать надо, да, но оно того стоит.
Именно так. Собственно, в следующем релизе util-linux tailf уже не будет.
Да-да, как раз хотел кинуть это. Пишут Makefile рекурсивные и потом жалуются на скорость работы make.
Второе издание пишется, 3 главы доступно в MEAP. Это ли не показатель, насколько переводы могут отставать от оригинала.
Выскажусь и за Fedora. Пользуюсь около двух лет, отличный дистрибутив. Свежие пакеты, при этом вполне себе стабильна (несмотря на байки в интернетах). Репозиторий не слишком большой по сравнению с некоторыми, но особенных проблем не испытывал, необходимое собирается без проблем. Хотя из коробки GNOME, кеды юзабельны (пару раз что-то с иконками происходило после обновления, но потом возвращалось на место).
Не так давно переехал на Tumbleweed, очень нравится система. KDE по умолчанию и готовят его отлично.
Про тот же Neon буквально сегодня читал, что опакечивают не слишком удачно — попытка удалить vlc пытается снести полсистемы.
Думаю, стоит упомянуть: CPython переехал на Github.
Очередной мем — Ждун.
Согласно MDN, начиная с ES6.
Прикреплю-ка видео по теме <random>, может кто ещё не видел.
Уже практически 6 лет стандарту C++11, а повсюду всё тот же
rand()
… Вот недавно на Coursera встретился, на новом курсе по алгоритмам.egrep
вместоgrep
писать, результат будет тот же. Во многих дистрибутивах просто вgrep -E
раскрывается, никаких зависимостей не просит.ps+grep
? Мне кажется, добавить один флагpgrep
проще, чем писать конвейер. Да и есть этотpgrep
даже в busybox (разве что, флаг-a
там отстутствует, иногда не хватает).Не подскажете, что не так делаю?
https://www.class-central.com/