]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
Fix crash in AppLayer Proto Detect 778/head
authorVictor Julien <victor@inliniac.net>
Fri, 17 Jan 2014 09:18:32 +0000 (10:18 +0100)
committerVictor Julien <victor@inliniac.net>
Fri, 17 Jan 2014 10:17:24 +0000 (11:17 +0100)
The App Proto Detect code would use the wrong pattern count to
index a results array, leading to SEGVs.

Bug #1080.

src/app-layer-detect-proto.c

index 9e6079d7683b90bfe1904101138ef72ea50cf8fe..d190abfefa0d5efa77c42618d91a8631f9711001 100644 (file)
@@ -244,7 +244,10 @@ static uint16_t AppLayerProtoDetectPMGetProto(AppLayerProtoDetectThreadCtx *tctx
     uint8_t pm_results_bf[(ALPROTO_MAX / 8) + 1];
     memset(pm_results_bf, 0, sizeof(pm_results_bf));
 
-    for (cnt = 0; cnt < search_cnt; cnt++) {
+    /* loop through unique pattern id's. Can't use search_cnt here,
+     * as that contains all matches, tctx->pmq.pattern_id_array_cnt
+     * contains only *unique* matches. */
+    for (cnt = 0; cnt < tctx->pmq.pattern_id_array_cnt; cnt++) {
         AppLayerProtoDetectPMSignature *s = pm_ctx->map[tctx->pmq.pattern_id_array[cnt]];
         while (s != NULL) {
             uint16_t proto = AppLayerProtoDetectPMMatchSignature(s, buf, searchlen, ipproto);