From 43379b7a6ddd1433b0e87aa49e098da4c3517e5a Mon Sep 17 00:00:00 2001 From: Julio Guerra Date: Wed, 16 Nov 2022 17:20:45 +0100 Subject: [PATCH] appsec/waf: fix memory release condition --- internal/appsec/waf/waf.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/internal/appsec/waf/waf.go b/internal/appsec/waf/waf.go index af990e62e1..ef8c1fd01c 100644 --- a/internal/appsec/waf/waf.go +++ b/internal/appsec/waf/waf.go @@ -941,6 +941,7 @@ func cFree(ptr unsafe.Pointer) { // Exported Go function to free ddwaf objects by using freeWO in order to keep // its dummy but efficient memory kallocation monitoring. +// //export go_ddwaf_object_free func go_ddwaf_object_free(v *C.ddwaf_object) { freeWO((*wafObject)(v)) @@ -949,17 +950,16 @@ func go_ddwaf_object_free(v *C.ddwaf_object) { // Go reimplementation of ddwaf_result_free to avoid yet another CGO call in the // request hot-path and avoiding it when there are no results to free. func freeWAFResult(result *C.ddwaf_result) { - if result.data == nil || result.actions.array == nil { - return + if data := result.data; data != nil { + C.free(unsafe.Pointer(data)) } - C.free(unsafe.Pointer(result.data)) - - array := result.actions.array - for i := 0; i < int(result.actions.size); i++ { - C.free(unsafe.Pointer(cindexCharPtrArray(array, i))) + if array := result.actions.array; array != nil { + for i := 0; i < int(result.actions.size); i++ { + C.free(unsafe.Pointer(cindexCharPtrArray(array, i))) + } + C.free(unsafe.Pointer(array)) } - C.free(unsafe.Pointer(array)) } // Helper function to access to i-th element of the given **C.char array.