@ -18,8 +18,8 @@
use crate ::detect ::SIGMATCH_NOOPT ;
use suricata_sys ::sys ::{
DetectEngineCtx , DetectEngineThreadCtx , InspectionBuffer , SCDetectHelperTransformRegister ,
SCDetectSignatureAddTransform , SC TransformTableElmt, Signature , SCInspectionBufferCheckAndExpand ,
SCInspectionBufferTruncate ,
SCDetectSignatureAddTransform , SC InspectionBufferCheckAndExpand, SCInspectionBufferInPlace ,
SCInspectionBufferTruncate , SCTransformTableElmt , Signature ,
} ;
use std ::os ::raw ::{ c_int , c_void } ;
@ -49,17 +49,19 @@ unsafe extern "C" fn dot_prefix_transform(
if input_len = = 0 {
return ;
}
let inplace = SCInspectionBufferInPlace ( buffer ) ;
let output = SCInspectionBufferCheckAndExpand ( buffer , input_len + 1 ) ;
if output . is_null ( ) {
// allocation failure
return ;
}
// get input after possible realloc
let input = ( * buffer ) . inspect ;
if input . is_null ( ) {
// allocation failure
return ;
}
let input = if inplace {
// may have been reallocated
( * buffer ) . buf
} else {
( * buffer ) . inspect
} ;
let input = build_slice ! ( input , input_len as usize ) ;
let output = std ::slice ::from_raw_parts_mut ( output , ( input_len + 1 ) as usize ) ;