Skip to content

Commit 93bcdd6

Browse files
uilianriesczoido
andauthored
Add Sanitizers examples (#192)
* Add asan example Signed-off-by: Uilian Ries <uilianr@jfrog.com> * Add profiles and code example Signed-off-by: Uilian Ries <uilianr@jfrog.com> * Improve README Signed-off-by: Uilian Ries <uilianr@jfrog.com> * Add settings_user section in the README Signed-off-by: Uilian Ries <uilianr@jfrog.com> * Fix ubsan profile Signed-off-by: Uilian Ries <uilianr@jfrog.com> * Add flags to the linker Signed-off-by: Uilian Ries <uilianr@jfrog.com> * Sanitizer setting is optional Signed-off-by: Uilian Ries <uilianr@jfrog.com> * Add CI scripts Signed-off-by: Uilian Ries <uilianr@jfrog.com> * Chmod +x Signed-off-by: Uilian Ries <uilianr@jfrog.com> * Add more flags Signed-off-by: Uilian Ries <uilianr@jfrog.com> * Moved sanitizers example to security Signed-off-by: Uilian Ries <uilianr@jfrog.com> * Simplify example build steps Signed-off-by: Uilian Ries <uilianr@jfrog.com> * Fix sanitizers build steps Signed-off-by: Uilian Ries <uilianr@jfrog.com> * Rename profile files Signed-off-by: Uilian Ries <uilianr@jfrog.com> * Adjust batch according Windows steps Signed-off-by: Uilian Ries <uilianries@gmail.com> * Keep same structure as for docs Signed-off-by: Uilian Ries <uilianr@jfrog.com> --------- Signed-off-by: Uilian Ries <uilianr@jfrog.com> Signed-off-by: Uilian Ries <uilianries@gmail.com> Co-authored-by: Carlos Zoido <mrgalleta@gmail.com>
1 parent 841ca9b commit 93bcdd6

File tree

14 files changed

+192
-0
lines changed

14 files changed

+192
-0
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,5 @@ Sources for the [examples section](https://docs.conan.io/2/examples.html) of the
2929
### [Libraries examples](examples/libraries)
3030

3131
### [Graph examples](examples/graph)
32+
33+
### [Security examples](examples/security)

examples/security/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Conan security examples
2+
3+
### [Using Compiler Sanitizers with Conan](sanitizers)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Using Compiler Sanitizers with Conan
2+
3+
This example follows the documented page https://docs.conan.io/2/examples/security/sanitizers.html about using compiler sanitizers with Conan.
4+
5+
For more information, please refer to the [C, C++ Compiler Sanitizers¶](https://docs.conan.io/2/security/sanitizers.html) documentation page.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
@echo off
2+
setlocal enabledelayedexpansion
3+
4+
echo Setup settings user
5+
for /f "usebackq delims=" %%H in (conan config home) do set "CONAN_HOME=%%H"
6+
copy /Y settings_user.yml "%CONAN_HOME%"
7+
8+
echo Conan Examples 2: Compiler Sanitizers - Index Out of Bounds
9+
10+
CD index_out_of_bounds/
11+
CALL conan build . -pr ../profiles/msvc_asan -c tools.compilation:verbosity=verbose
12+
CALL build/Debug/index_out_of_bounds 2>nul || echo Process completed with errors (expected for sanitizer demo)
13+
CD ..
14+
15+
echo Conan Examples 2: Compiler Sanitizers - Signed Integer Overflow
16+
17+
CD signed_integer_overflow/
18+
CALL conan build . -pr ../profiles/msvc_asan -c tools.compilation:verbosity=verbose
19+
CALL build/Debug/signed_integer_overflow 2>nul || echo Process completed with errors (expected for sanitizer demo)
20+
CD ..
21+
22+
exit /b 0
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/bin/bash
2+
3+
set -e
4+
set -x
5+
6+
echo "Setup settings user"
7+
cp -f settings_user.yml $(conan config home)
8+
9+
echo "Conan Examples 2: Compiler Sanitizers - Index Out of Bounds"
10+
11+
pushd index_out_of_bounds/
12+
conan build . -pr ../profiles/clang_asan -c tools.compilation:verbosity=verbose
13+
build/Debug/index_out_of_bounds || true
14+
popd
15+
16+
echo "Conan Examples 2: Compiler Sanitizers - Signed Integer Overflow"
17+
18+
pushd signed_integer_overflow/
19+
conan build . -pr ../profiles/clang_asan_ubsan -c tools.compilation:verbosity=verbose
20+
build/Debug/signed_integer_overflow || true
21+
popd
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
cmake_minimum_required(VERSION 3.15)
2+
project(index_out_of_bounds LANGUAGES CXX)
3+
4+
add_executable(index_out_of_bounds main.cpp)
5+
target_compile_features(index_out_of_bounds PUBLIC cxx_std_11)
6+
7+
include(GNUInstallDirs)
8+
install(TARGETS index_out_of_bounds
9+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
from conan import ConanFile
2+
from conan.tools.cmake import CMake, cmake_layout, CMakeToolchain
3+
4+
required_conan_version = ">=2.1.0"
5+
6+
class IndexOutOfBoundsConan(ConanFile):
7+
name = "index_out_of_bounds"
8+
version = "0.1.0"
9+
settings = "os", "arch", "compiler", "build_type"
10+
exports_sources = "CMakeLists.txt", "main.cpp"
11+
package_type = "application"
12+
languages = ["C++"]
13+
14+
def layout(self):
15+
cmake_layout(self)
16+
17+
def generate(self):
18+
tc = CMakeToolchain(self)
19+
tc.generate()
20+
21+
def build(self):
22+
cmake = CMake(self)
23+
cmake.configure()
24+
cmake.build()
25+
26+
def package(self):
27+
cmake = CMake(self)
28+
cmake.install()
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#include <iostream>
2+
#include <cstdlib>
3+
4+
int main() {
5+
#ifdef __SANITIZE_ADDRESS__
6+
std::cout << "Address sanitizer enabled\n";
7+
#else
8+
std::cout << "Address sanitizer not enabled\n";
9+
#endif
10+
11+
int foo[100];
12+
foo[100] = 42; // Out-of-bounds write
13+
14+
return EXIT_SUCCESS;
15+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
include(default)
2+
3+
[settings]
4+
build_type=Debug
5+
compiler.sanitizer=Address
6+
7+
[conf]
8+
tools.build:cflags=['-fsanitize=address']
9+
tools.build:cxxflags=['-fsanitize=address']
10+
tools.build:exelinkflags=['-fsanitize=address']
11+
tools.build:sharedlinkflags+=["-fsanitize=address"]
12+
13+
[runenv]
14+
ASAN_OPTIONS="halt_on_error=1:detect_leaks=1"
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
include(default)
2+
3+
[settings]
4+
build_type=Debug
5+
compiler.sanitizer=AddressUndefinedBehavior
6+
7+
[conf]
8+
tools.build:cflags=['-fsanitize=address,undefined']
9+
tools.build:cxxflags=['-fsanitize=address,undefined']
10+
tools.build:exelinkflags=['-fsanitize=address,undefined']
11+
tools.build:sharedlinkflags+=["-fsanitize=address"]

0 commit comments

Comments
 (0)