| /* 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; |
| } |