mirror of
https://gitlab.kitware.com/cmake/cmake.git
synced 2026-09-25 04:09:36 +03:00
Fuzz the CMake math expression parser (math(EXPR)). Tests arithmetic expression parsing and evaluation.
49 lines
1.2 KiB
C++
49 lines
1.2 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 math expression parser
|
|
*
|
|
* The math() command uses cmExprParserHelper to evaluate mathematical
|
|
* expressions. This fuzzer tests the expression parser for crashes,
|
|
* hangs, and undefined behavior.
|
|
*
|
|
* Coverage targets:
|
|
* - Integer arithmetic parsing
|
|
* - Operator precedence handling
|
|
* - Parentheses nesting
|
|
* - Error handling for invalid expressions
|
|
*/
|
|
|
|
#include <cstddef>
|
|
#include <cstdint>
|
|
#include <string>
|
|
|
|
#include "cmExprParserHelper.h"
|
|
|
|
// Limit input size to prevent DoS via deeply nested expressions
|
|
static constexpr size_t kMaxInputSize = 4096;
|
|
|
|
extern "C" int LLVMFuzzerTestOneInput(uint8_t const* data, size_t size)
|
|
{
|
|
if (size == 0 || size > kMaxInputSize) {
|
|
return 0;
|
|
}
|
|
|
|
// Create null-terminated string
|
|
std::string input(reinterpret_cast<char const*>(data), size);
|
|
|
|
cmExprParserHelper helper;
|
|
|
|
// Parse with different verbosity levels
|
|
int result = helper.ParseString(input.c_str(), 0);
|
|
(void)result;
|
|
|
|
// Always check result and error accessors
|
|
(void)helper.GetResult();
|
|
(void)helper.GetError();
|
|
(void)helper.GetWarning();
|
|
|
|
return 0;
|
|
}
|