Browse code

libclamav/matcher-bm.c: only sort correct offsets (bb#1840)

Tomasz Kojm authored on 2010/03/04 22:45:32
Showing 2 changed files
... ...
@@ -1,3 +1,7 @@
1
+Thu Mar  4 14:41:39 CET 2010 (tk)
2
+---------------------------------
3
+ * libclamav/matcher-bm.c: only sort correct offsets (bb#1840)
4
+
1 5
 Thu Feb 25 17:20:27 CET 2010 (tk)
2 6
 ---------------------------------
3 7
  * docs: update signatures.pdf
... ...
@@ -184,6 +184,8 @@ int cli_bm_initoff(const struct cli_matcher *root, struct cli_bm_off *data, fmap
184 184
 	patt = root->bm_pattab[i];
185 185
 	if(patt->offdata[0] == CLI_OFF_ABSOLUTE) {
186 186
 	    data->offtab[data->cnt] = patt->offset_min + patt->prefix_length;
187
+	    if(data->offtab[data->cnt] >= map->len)
188
+		continue;
187 189
 	    data->cnt++;
188 190
 	} else if((ret = cli_caloff(NULL, &info, map, root->type, patt->offdata, &data->offset[patt->offset_min], NULL))) {
189 191
 	    cli_errmsg("cli_bm_initoff: Can't calculate relative offset in signature for %s\n", patt->virname);
... ...
@@ -195,6 +197,8 @@ int cli_bm_initoff(const struct cli_matcher *root, struct cli_bm_off *data, fmap
195 195
 	} else if((data->offset[patt->offset_min] != CLI_OFF_NONE) && (data->offset[patt->offset_min] + patt->length <= info.fsize)) {
196 196
 	    if(!data->cnt || (data->offset[patt->offset_min] != data->offtab[data->cnt - 1])) {
197 197
 		data->offtab[data->cnt] = data->offset[patt->offset_min] + patt->prefix_length;
198
+		if(data->offtab[data->cnt] >= map->len)
199
+		    continue;
198 200
 		data->cnt++;
199 201
 	    }
200 202
 	}