diff --git a/headers/modsecurity/transaction.h b/headers/modsecurity/transaction.h index 3e70caa38..d9d670d9c 100644 --- a/headers/modsecurity/transaction.h +++ b/headers/modsecurity/transaction.h @@ -205,9 +205,12 @@ class TransactionAnchoredVariables { m_variableFilesTmpNames(t, "FILES_TMPNAMES"), m_variableMultipartPartHeaders(t, "MULTIPART_PART_HEADERS"), m_variableOffset(0), - m_variableArgsNames("ARGS_NAMES", &m_variableArgs), - m_variableArgsGetNames("ARGS_GET_NAMES", &m_variableArgsGet), - m_variableArgsPostNames("ARGS_POST_NAMES", &m_variableArgsPost) + m_pVariableArgsNames(std::make_unique("ARGS_NAMES", &m_variableArgs)), + m_variableArgsNames(*m_pVariableArgsNames), + m_pVariableArgsGetNames(std::make_unique("ARGS_GET_NAMES", &m_variableArgsGet)), + m_variableArgsGetNames(*m_pVariableArgsGetNames), + m_pVariableArgsPostNames(std::make_unique("ARGS_POST_NAMES", &m_variableArgsPost)), + m_variableArgsPostNames(*m_pVariableArgsPostNames) { } AnchoredSetVariable m_variableRequestHeadersNames; @@ -291,9 +294,12 @@ class TransactionAnchoredVariables { int m_variableOffset; - AnchoredSetVariableTranslationProxy m_variableArgsNames; - AnchoredSetVariableTranslationProxy m_variableArgsGetNames; - AnchoredSetVariableTranslationProxy m_variableArgsPostNames; + std::unique_ptr m_pVariableArgsNames; + AnchoredSetVariableTranslationProxy &m_variableArgsNames; + std::unique_ptr m_pVariableArgsGetNames; + AnchoredSetVariableTranslationProxy &m_variableArgsGetNames; + std::unique_ptr m_pVariableArgsPostNames; + AnchoredSetVariableTranslationProxy &m_variableArgsPostNames; }; class TransactionSecMarkerManagement { diff --git a/src/transaction.cc b/src/transaction.cc index 6c8ae9744..a3b93336d 100644 --- a/src/transaction.cc +++ b/src/transaction.cc @@ -170,6 +170,12 @@ Transaction::~Transaction() { m_rulesMessages.clear(); + m_ruleRemoveById.clear(); + m_ruleRemoveByIdRange.clear(); + m_ruleRemoveByTag.clear(); + m_ruleRemoveTargetById.clear(); + m_ruleRemoveTargetByTag.clear(); + intervention::free(&m_it); intervention::clean(&m_it);