@@ -815,21 +815,30 @@ static int DetectPcreParseCapture(const char *regexstr, DetectEngineCtx *de_ctx,
815815 return -1 ;
816816
817817 } else if (strncmp (name_array [name_idx ], "flow:" , 5 ) == 0 ) {
818- pd -> capids [ pd -> idx ] =
818+ uint32_t varname_id =
819819 VarNameStoreRegister (name_array [name_idx ] + 5 , VAR_TYPE_FLOW_VAR );
820+ if (unlikely (varname_id == 0 ))
821+ return -1 ;
822+ pd -> capids [pd -> idx ] = varname_id ;
820823 pd -> captypes [pd -> idx ] = VAR_TYPE_FLOW_VAR ;
821824 pd -> idx ++ ;
822825
823826 } else if (strncmp (name_array [name_idx ], "pkt:" , 4 ) == 0 ) {
824- pd -> capids [ pd -> idx ] =
827+ uint32_t varname_id =
825828 VarNameStoreRegister (name_array [name_idx ] + 4 , VAR_TYPE_PKT_VAR );
829+ if (unlikely (varname_id == 0 ))
830+ return -1 ;
831+ pd -> capids [pd -> idx ] = varname_id ;
826832 pd -> captypes [pd -> idx ] = VAR_TYPE_PKT_VAR ;
827833 SCLogDebug ("id %u type %u" , pd -> capids [pd -> idx ], pd -> captypes [pd -> idx ]);
828834 pd -> idx ++ ;
829835
830836 } else if (strncmp (name_array [name_idx ], "alert:" , 6 ) == 0 ) {
831- pd -> capids [ pd -> idx ] =
837+ uint32_t varname_id =
832838 VarNameStoreRegister (name_array [name_idx ] + 6 , VAR_TYPE_ALERT_VAR );
839+ if (unlikely (varname_id == 0 ))
840+ return -1 ;
841+ pd -> capids [pd -> idx ] = varname_id ;
833842 pd -> captypes [pd -> idx ] = VAR_TYPE_ALERT_VAR ;
834843 pd -> idx ++ ;
835844
@@ -890,16 +899,25 @@ static int DetectPcreParseCapture(const char *regexstr, DetectEngineCtx *de_ctx,
890899 }
891900
892901 if (strcmp (type_str , "pkt" ) == 0 ) {
893- pd -> capids [pd -> idx ] = VarNameStoreRegister ((char * )capture_str , VAR_TYPE_PKT_VAR );
902+ uint32_t varname_id = VarNameStoreRegister ((char * )capture_str , VAR_TYPE_PKT_VAR );
903+ if (unlikely (varname_id == 0 ))
904+ return -1 ;
905+ pd -> capids [pd -> idx ] = varname_id ;
894906 pd -> captypes [pd -> idx ] = VAR_TYPE_PKT_VAR ;
895907 SCLogDebug ("id %u type %u" , pd -> capids [pd -> idx ], pd -> captypes [pd -> idx ]);
896908 pd -> idx ++ ;
897909 } else if (strcmp (type_str , "flow" ) == 0 ) {
898- pd -> capids [pd -> idx ] = VarNameStoreRegister ((char * )capture_str , VAR_TYPE_FLOW_VAR );
910+ uint32_t varname_id = VarNameStoreRegister ((char * )capture_str , VAR_TYPE_FLOW_VAR );
911+ if (unlikely (varname_id == 0 ))
912+ return -1 ;
913+ pd -> capids [pd -> idx ] = varname_id ;
899914 pd -> captypes [pd -> idx ] = VAR_TYPE_FLOW_VAR ;
900915 pd -> idx ++ ;
901916 } else if (strcmp (type_str , "alert" ) == 0 ) {
902- pd -> capids [pd -> idx ] = VarNameStoreRegister ((char * )capture_str , VAR_TYPE_ALERT_VAR );
917+ uint32_t varname_id = VarNameStoreRegister ((char * )capture_str , VAR_TYPE_ALERT_VAR );
918+ if (unlikely (varname_id == 0 ))
919+ return -1 ;
920+ pd -> capids [pd -> idx ] = varname_id ;
903921 pd -> captypes [pd -> idx ] = VAR_TYPE_ALERT_VAR ;
904922 pd -> idx ++ ;
905923 }
0 commit comments