mirror of
https://github.com/Kitware/CMake.git
synced 2026-06-24 08:47:59 +00:00
Tests/Fuzzing: Add cmCMakePathFuzzer
Fuzz the CMake path manipulation utilities. Tests cmake_path() operations.
This commit is contained in:
committed by
Brad King
parent
e4f4ad5959
commit
78992bf2ea
@@ -79,3 +79,6 @@ add_fuzzer(cmStringAlgorithmsFuzzer cmStringAlgorithmsFuzzer.cxx)
|
||||
|
||||
# Version parser fuzzer
|
||||
add_fuzzer(cmVersionFuzzer cmVersionFuzzer.cxx)
|
||||
|
||||
# CMake path fuzzer
|
||||
add_fuzzer(cmCMakePathFuzzer cmCMakePathFuzzer.cxx)
|
||||
|
||||
61
Tests/Fuzzing/cmCMakePath.dict
Normal file
61
Tests/Fuzzing/cmCMakePath.dict
Normal file
@@ -0,0 +1,61 @@
|
||||
# CMake path dictionary
|
||||
|
||||
# Separators
|
||||
"/"
|
||||
"\\"
|
||||
":"
|
||||
|
||||
# Unix paths
|
||||
"/usr"
|
||||
"/usr/local"
|
||||
"/home"
|
||||
"/tmp"
|
||||
"/var"
|
||||
"/etc"
|
||||
"/opt"
|
||||
"/bin"
|
||||
"/lib"
|
||||
|
||||
# Windows paths
|
||||
"C:"
|
||||
"D:"
|
||||
"C:\\"
|
||||
"Program Files"
|
||||
"Windows"
|
||||
|
||||
# CMake directories
|
||||
"CMakeFiles"
|
||||
"cmake"
|
||||
"share"
|
||||
"lib"
|
||||
"include"
|
||||
"bin"
|
||||
"build"
|
||||
"src"
|
||||
"source"
|
||||
|
||||
# Special paths
|
||||
"."
|
||||
".."
|
||||
"./"
|
||||
"../"
|
||||
"~"
|
||||
|
||||
# Extensions
|
||||
".cmake"
|
||||
".txt"
|
||||
".h"
|
||||
".hpp"
|
||||
".c"
|
||||
".cpp"
|
||||
".cxx"
|
||||
".a"
|
||||
".so"
|
||||
".dll"
|
||||
".lib"
|
||||
|
||||
# CMake files
|
||||
"CMakeLists.txt"
|
||||
"CMakeCache.txt"
|
||||
"cmake_install.cmake"
|
||||
"CTestTestfile.cmake"
|
||||
77
Tests/Fuzzing/cmCMakePathFuzzer.cxx
Normal file
77
Tests/Fuzzing/cmCMakePathFuzzer.cxx
Normal file
@@ -0,0 +1,77 @@
|
||||
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
file LICENSE.rst or https://cmake.org/licensing for details. */
|
||||
|
||||
/*
|
||||
* Fuzzer for CMake's path manipulation (cmCMakePath)
|
||||
*
|
||||
* Tests path parsing, normalization, and manipulation operations.
|
||||
*/
|
||||
|
||||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
|
||||
#include "cmCMakePath.h"
|
||||
|
||||
static constexpr size_t kMaxInputSize = 4096;
|
||||
|
||||
extern "C" int LLVMFuzzerTestOneInput(uint8_t const* data, size_t size)
|
||||
{
|
||||
if (size == 0 || size > kMaxInputSize) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::string input(reinterpret_cast<char const*>(data), size);
|
||||
|
||||
// Test various path operations
|
||||
cmCMakePath path(input);
|
||||
|
||||
// Basic queries
|
||||
(void)path.IsEmpty();
|
||||
(void)path.HasRootPath();
|
||||
(void)path.HasRootName();
|
||||
(void)path.HasRootDirectory();
|
||||
(void)path.HasRelativePath();
|
||||
(void)path.HasParentPath();
|
||||
(void)path.HasFileName();
|
||||
(void)path.HasStem();
|
||||
(void)path.HasExtension();
|
||||
(void)path.IsAbsolute();
|
||||
(void)path.IsRelative();
|
||||
|
||||
// Component extraction
|
||||
(void)path.GetRootName();
|
||||
(void)path.GetRootDirectory();
|
||||
(void)path.GetRootPath();
|
||||
(void)path.GetRelativePath();
|
||||
(void)path.GetParentPath();
|
||||
(void)path.GetFileName();
|
||||
(void)path.GetExtension();
|
||||
(void)path.GetStem();
|
||||
(void)path.String();
|
||||
(void)path.GenericString();
|
||||
|
||||
// Manipulation
|
||||
cmCMakePath normalized = path.Normal();
|
||||
(void)normalized.String();
|
||||
|
||||
// If we have two paths in input, test operations between them
|
||||
size_t midpoint = size / 2;
|
||||
if (midpoint > 0) {
|
||||
std::string input1(reinterpret_cast<char const*>(data), midpoint);
|
||||
std::string input2(reinterpret_cast<char const*>(data + midpoint),
|
||||
size - midpoint);
|
||||
|
||||
cmCMakePath path1(input1);
|
||||
cmCMakePath path2(input2);
|
||||
|
||||
// Append operations
|
||||
cmCMakePath appended = path1 / path2;
|
||||
(void)appended.String();
|
||||
|
||||
// Comparison
|
||||
(void)(path1 == path2);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user