mirror of
https://gitlab.kitware.com/cmake/cmake.git
synced 2026-09-25 04:09:36 +03:00
Fuzz the CMake version string parser. Tests parsing of version numbers like 1.2.3.4.
57 lines
2.0 KiB
C++
57 lines
2.0 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 version comparison
|
|
*
|
|
* Tests version string parsing and comparison operations.
|
|
*/
|
|
|
|
#include <cstddef>
|
|
#include <cstdint>
|
|
#include <string>
|
|
|
|
#include "cmSystemTools.h"
|
|
#include "cmVersion.h"
|
|
|
|
static constexpr size_t kMaxInputSize = 1024;
|
|
|
|
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 version comparison with current CMake version
|
|
(void)cmSystemTools::VersionCompare(cmSystemTools::OP_LESS, input, "3.28.0");
|
|
(void)cmSystemTools::VersionCompare(cmSystemTools::OP_GREATER, input,
|
|
"3.28.0");
|
|
(void)cmSystemTools::VersionCompare(cmSystemTools::OP_EQUAL, input,
|
|
"3.28.0");
|
|
(void)cmSystemTools::VersionCompare(cmSystemTools::OP_LESS_EQUAL, input,
|
|
"3.28.0");
|
|
(void)cmSystemTools::VersionCompare(cmSystemTools::OP_GREATER_EQUAL, input,
|
|
"3.28.0");
|
|
|
|
// Compare against itself
|
|
(void)cmSystemTools::VersionCompare(cmSystemTools::OP_EQUAL, input, input);
|
|
|
|
// If input is large enough, compare two different versions from input
|
|
if (size >= 4) {
|
|
std::string v1(reinterpret_cast<char const*>(data), size / 2);
|
|
std::string v2(reinterpret_cast<char const*>(data + size / 2),
|
|
size - size / 2);
|
|
(void)cmSystemTools::VersionCompare(cmSystemTools::OP_LESS, v1, v2);
|
|
(void)cmSystemTools::VersionCompare(cmSystemTools::OP_GREATER, v1, v2);
|
|
(void)cmSystemTools::VersionCompare(cmSystemTools::OP_EQUAL, v1, v2);
|
|
}
|
|
|
|
// Version compare with greater/less string format
|
|
(void)cmSystemTools::VersionCompareGreater(input, "1.0.0");
|
|
(void)cmSystemTools::VersionCompareGreaterEq(input, "1.0.0");
|
|
|
|
return 0;
|
|
}
|