mirror of
https://gitlab.kitware.com/cmake/cmake.git
synced 2026-09-25 04:09:36 +03:00
Fuzz the CMake path manipulation utilities. Tests cmake_path() operations.
78 lines
1.9 KiB
C++
78 lines
1.9 KiB
C++
/* 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;
|
|
}
|