diff options
Diffstat (limited to 'src/plugins/test_lib.c')
-rw-r--r-- | src/plugins/test_lib.c | 50 |
1 files changed, 41 insertions, 9 deletions
diff --git a/src/plugins/test_lib.c b/src/plugins/test_lib.c index efbe2cf..97d4dc5 100644 --- a/src/plugins/test_lib.c +++ b/src/plugins/test_lib.c @@ -24,7 +24,8 @@ */ #include "platform.h" #include "test_lib.h" - +#include <sys/types.h> +#include <regex.h> /** * Function that libextractor calls for each @@ -57,14 +58,45 @@ process_replies (void *cls, (sd[i].type != type) || (sd[i].format != format) ) continue; - if ( (EXTRACTOR_METAFORMAT_BINARY != format) && - ( (sd[i].data_len != data_len) || - (0 != memcmp (sd[i].data, data, data_len)) ) ) - continue; - if ( (EXTRACTOR_METAFORMAT_BINARY == format) && - ( (sd[i].data_len > data_len) || - (0 != memcmp (sd[i].data, data, sd[i].data_len)) ) ) - continue; + if ( (sd[i].regex) && + (EXTRACTOR_METAFORMAT_BINARY != format) ) + { + regex_t re; + regmatch_t match; + + if (0 != + regcomp (&re, + sd[i].data, + REG_EXTENDED)) + { + fprintf (stderr, + "Not a valid regex: %s\n", + sd[i].data); + abort (); + } + if ( ('\0' != data[data_len - 1]) || + (0 != regexec (&re, + data, + 1, + &match, + 0)) ) + { + regfree (&re); + continue; + } + regfree (&re); + } + else + { + if ( (EXTRACTOR_METAFORMAT_BINARY != format) && + ( (sd[i].data_len != data_len) || + (0 != memcmp (sd[i].data, data, data_len)) ) ) + continue; + if ( (EXTRACTOR_METAFORMAT_BINARY == format) && + ( (sd[i].data_len > data_len) || + (0 != memcmp (sd[i].data, data, sd[i].data_len)) ) ) + continue; + } if (NULL != sd[i].data_mime_type) { |