diff --git a/fuzz/fuzz_mms_encode.c b/fuzz/fuzz_mms_encode.c new file mode 100644 index 00000000..1a40db3f --- /dev/null +++ b/fuzz/fuzz_mms_encode.c @@ -0,0 +1,35 @@ +#include +#include + +#include "iec61850_server.h" +#include "hal_thread.h" +#include "lib_memory.h" + +int LLVMFuzzerTestOneInput(const char *data, size_t size) { + int out; + MmsValue* mmsValue = NULL; + mmsValue = MmsValue_decodeMmsData(data, 0, size, &out); + if (mmsValue == NULL) { + return 0; + } + + int dataSize = MmsValue_encodeMmsData(mmsValue, NULL, 0, false); + if (dataSize <= 0) { + return 0; + } + + uint8_t *mmsBuffer = (uint8_t *)GLOBAL_MALLOC(dataSize); + if (mmsBuffer == NULL) { + return 0; + } + + MmsValue_encodeMmsData(mmsValue, mmsBuffer, 0, true); + + GLOBAL_FREEMEM(mmsBuffer); + + if (mmsValue != NULL) { + MmsValue_delete(mmsValue); + } + + return 0; +} \ No newline at end of file diff --git a/fuzz/fuzz_mms_print b/fuzz/fuzz_mms_print new file mode 100644 index 00000000..6aa6aa19 --- /dev/null +++ b/fuzz/fuzz_mms_print @@ -0,0 +1,30 @@ +#include +#include + +#include "iec61850_server.h" +#include "hal_thread.h" + +#define kBufSize 4096 + +int LLVMFuzzerTestOneInput(const char *data, size_t size) { + int out; + MmsValue* mmsValue = NULL; + mmsValue = MmsValue_decodeMmsData(data, 0, size, &out); + if (mmsValue == NULL) { + return 0; + } + + int dataSize = MmsValue_encodeMmsData(mmsValue, NULL, 0, false); + if (dataSize <= 0) { + return 0; + } + + char printBuffer[kBufSize]; + MmsValue_printToBuffer(mmsValue, printBuffer, kBufSize); + + if (mmsValue != NULL) { + MmsValue_delete(mmsValue); + } + + return 0; +} \ No newline at end of file