static int FlowStorageTest02(void) { Flow *f = NULL; StorageInit(); int id1 = FlowStorageRegister("test", sizeof(void *), NULL, StorageTestFree); if (id1 < 0) goto error; if (StorageFinalize() < 0) goto error; FlowInitConfig(FLOW_QUIET); f = FlowAlloc(); if (f == NULL) { goto error; } void *ptr = FlowGetStorageById(f, id1); if (ptr != NULL) { goto error; } void *ptr1a = SCMalloc(128); if (ptr1a == NULL) { goto error; } FlowSetStorageById(f, id1, ptr1a); void *ptr1b = FlowGetStorageById(f, id1); if (ptr1a != ptr1b) { goto error; } FlowClearMemory(f, 0); FlowFree(f); FlowShutdown(); StorageCleanup(); return 1; error: if (f != NULL) { FlowClearMemory(f, 0); FlowFree(f); } FlowShutdown(); StorageCleanup(); return 0; }
void UTHFreeFlow(Flow *flow) { if (flow != NULL) { FlowFree(flow); } }
int AppLayerParserFromFile(AppProto alproto, char *filename) { int result = 1; Flow *f = NULL; TcpSession ssn; AppLayerParserThreadCtx *alp_tctx = AppLayerParserThreadCtxAlloc(); memset(&ssn, 0, sizeof(ssn)); f = SCCalloc(1, sizeof(Flow)); if (f == NULL) goto end; FLOW_INITIALIZE(f); f->flags |= FLOW_IPV4; f->src.addr_data32[0] = 0x01020304; f->dst.addr_data32[0] = 0x05060708; f->sp = 10000; f->dp = 80; f->protoctx = &ssn; f->proto = IPPROTO_TCP; f->alproto = alproto; uint8_t buffer[64]; #ifdef AFLFUZZ_PERSISTANT_MODE while (__AFL_LOOP(1000)) { /* reset state */ memset(buffer, 0, sizeof(buffer)); #endif /* AFLFUZZ_PERSISTANT_MODE */ FILE *fp = fopen(filename, "r"); BUG_ON(fp == NULL); int start = 1; int flip = 0; while (1) { int done = 0; size_t result = fread(&buffer, 1, sizeof(buffer), fp); if (result < sizeof(buffer)) done = 1; //SCLogInfo("result %u done %d start %d", (uint)result, done, start); uint8_t flags = 0; if (flip) { flags = STREAM_TOCLIENT; flip = 0; } else { flags = STREAM_TOSERVER; flip = 1; } if (start--) { flags |= STREAM_START; } if (done) { flags |= STREAM_EOF; } //PrintRawDataFp(stdout, buffer, result); (void)AppLayerParserParse(NULL, alp_tctx, f, alproto, flags, buffer, result); if (done) break; } fclose(fp); #ifdef AFLFUZZ_PERSISTANT_MODE } #endif /* AFLFUZZ_PERSISTANT_MODE */ result = 0; end: if (alp_tctx != NULL) AppLayerParserThreadCtxFree(alp_tctx); if (f != NULL) { FlowFree(f); } return result; }
static int FlowStorageTest01(void) { Flow *f = NULL; StorageInit(); int id1 = FlowStorageRegister("test", 8, StorageTestAlloc, StorageTestFree); if (id1 < 0) goto error; int id2 = FlowStorageRegister("variable", 24, StorageTestAlloc, StorageTestFree); if (id2 < 0) goto error; int id3 = FlowStorageRegister("store", sizeof(void *), StorageTestAlloc, StorageTestFree); if (id3 < 0) goto error; if (StorageFinalize() < 0) goto error; FlowInitConfig(FLOW_QUIET); f = FlowAlloc(); if (f == NULL) { goto error; } void *ptr = FlowGetStorageById(f, id1); if (ptr != NULL) { goto error; } ptr = FlowGetStorageById(f, id2); if (ptr != NULL) { goto error; } ptr = FlowGetStorageById(f, id3); if (ptr != NULL) { goto error; } void *ptr1a = FlowAllocStorageById(f, id1); if (ptr1a == NULL) { goto error; } void *ptr2a = FlowAllocStorageById(f, id2); if (ptr2a == NULL) { goto error; } void *ptr3a = FlowAllocStorageById(f, id3); if (ptr3a == NULL) { goto error; } void *ptr1b = FlowGetStorageById(f, id1); if (ptr1a != ptr1b) { goto error; } void *ptr2b = FlowGetStorageById(f, id2); if (ptr2a != ptr2b) { goto error; } void *ptr3b = FlowGetStorageById(f, id3); if (ptr3a != ptr3b) { goto error; } FlowClearMemory(f, 0); FlowFree(f); FlowShutdown(); StorageCleanup(); return 1; error: if (f != NULL) { FlowClearMemory(f, 0); FlowFree(f); } FlowShutdown(); StorageCleanup(); return 0; }