Пример 1 (mod_performance версия 0.4)

Исходные коды модуля доступны по адресу https://github.com/bayrepo/mod_performance

Последовательность действий проверки:

скачиваем архив с исходным кодом

распаковываем и переходим в папку с исходными кодами

  • unzip master.zip
  • cd mod_performance-master/

копируем глобальный файл настроек и делаем его специфическим для текущей папки, добавляем проверку rats и имя результирующего отчета, а также число обрамляющих ошибку строк

  • cp /etc/bzr.conf ./bzr.conf
  • vi bzr.conf
[default]
compilator = gcc c++ cc cc1
extention= c cpp h cxx hpp c++
stderr=on
globaldefs= -Dlinux
outputfile=mod_perf_report_0.4.18.html
replace=off
bashcmd=/bin/bash -c

[plugins]
checkby=cppcheck rats
output=html
template=FILE;LINE;SEV;ID;MESSAGE
wrapstrings=5
html_template=result_w3.tpl

запускаем анализатор

  • bayzr cmd make
  • результат

Последовательность действий проверки:

скачиваем архив с исходным кодом

распаковываем и переходим в папку с исходными кодами

  • unzip master.zip
  • cd mod_performance-master/

копируем глобальный файл настроек и делаем его специфическим для текущей папки, добавляем проверку rats и имя результирующего отчета, а также число обрамляющих ошибку строк

  • cp /etc/bzr.conf ./bzr.conf
  • vi bzr.conf
[default]
compilator = gcc c++ cc cc1
extention= c cpp h cxx hpp c++
stderr=on
globaldefs= -D__FREEBSD__ -I/usr/include/httpd/ -I/usr/include/apr-1
outputfile=mod_perf_report_0.4.18_2.html
replace=off
bashcmd=/bin/bash -c

[plugins]
checkby=cppcheck rats
output=html
template=FILE;LINE;SEV;ID;MESSAGE
wrapstrings=20
html_template=result_w3.tpl

запускаем анализатор

  • bayzr cmd "find . -name '*.c' | xargs -n 1 echo 'gcc '" - т.е искусственно создается gcc и путь к файлу
  • результат

Пример 2 (искусственный код)

Вот такой код был подготовлен для статического анализа:

Искусственный код - пример: buggy_test.c

#include <stdio.h>
#include <strings.h>
#include <stdlib.h>
#include <string.h>

int function1(char *a){
    printf("Variable 1 = %d\n", strlen(a));
    a = malloc(10*sizeof(char));
    sprintf(a, "This is huge text, more then array size %d\n", 10000000000L);
    return strlen(a);
}

char *function2(){
    char *internal_buffer = alloca(10 * sizeof(char));
    snprintf(internal_buffer, 12, "Another big string to copy to the buffer\n");
    return internal_buffer;
}

int function3(int a, int b){
    int c[20];
    int i;
    a = a * i;
    for (i=0;i<21;i++){
     c[i]=a*b;
     a=++a+a++;
    }
    return c[i-22];
}

int main(int argc, char **argv){
    char arr[10] = "12345678901";
    char *buf;
    if (argc>0){
	strcpy(arr, argv[1]);
    }
    int result = function1(buf);
    printf("Result %d, %s\n", result, arr);
    buf = function2();
    printf("Buf %s\n", buf);
    result = function3(10,20);
    printf("Result %d\n", result);
    return 0;
}
  1. зайти в папку сканируемого проекта cd ~/check/ в папке находится тестируемый файл
  2. с помощью команды -menu создаются локальные настройки для проекта
  3. далее дается команда -debug-commands cmd gcc -o buggy test.c для сборки проекта, в момент сборки bayzr собирает список файлов для анализа и список параметров сборки
  4. результат сборки и работы bayzr - это файл отчета

Видео выполнения команд над тестовым примером:

Результат проверки