Mercurial > hg-stable
view contrib/fuzz/fm1readmarkers.cc @ 51535:b0d08bdc6a60
stream-clone-test: simplify the test for getbundle with stream=1
The core of this tests is about checking we receive a stream bundle with such
request. We don't need to look at too much of the details of the stream itself.
Since the content of the stream if shifting overtime, Such check is very
fragile and consume a lot of time for little value when adjusting formats,
caches, and protocol.
So we reduce the size of what we check to focus on "is this a stream clone"
question.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 28 Feb 2024 22:15:33 +0100 |
parents | 8766728dbce6 |
children |
line wrap: on
line source
#include <Python.h> #include <assert.h> #include <stdlib.h> #include <unistd.h> #include <string> #include "pyutil.h" extern "C" { static PYCODETYPE *code; extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) { contrib::initpy(*argv[0]); code = (PYCODETYPE *)Py_CompileString(R"py( def maybeint(s, default): try: return int(s) except ValueError: return default try: parts = data.split('\0', 2) if len(parts) == 3: offset, stop, data = parts elif len(parts) == 2: stop, data = parts offset = 0 else: offset = stop = 0 offset, stop = maybeint(offset, 0), maybeint(stop, len(data)) parsers.fm1readmarkers(data, offset, stop) except Exception as e: pass # uncomment this print if you're editing this Python code # to debug failures. # print e )py", "fuzzer", Py_file_input); return 0; } int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { PyObject *text = PyBytes_FromStringAndSize((const char *)Data, (Py_ssize_t)Size); PyObject *locals = PyDict_New(); PyDict_SetItemString(locals, "data", text); PyObject *res = PyEval_EvalCode(code, contrib::pyglobals(), locals); if (!res) { PyErr_Print(); } Py_XDECREF(res); Py_DECREF(locals); Py_DECREF(text); return 0; // Non-zero return values are reserved for future use. } }