X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=fecdec_filter.c;h=daecee7e5fc50bcb61f8cad8c481efb4e006a2b3;hb=92ac8f15dac214cc1b8f9e16288646068cac6432;hp=817e4c66c7bc96a2e59b5b7230d8b490633dbbb6;hpb=9da3498d99e07ba38a205fa3833f1ec95bc7b33b;p=paraslash.git diff --git a/fecdec_filter.c b/fecdec_filter.c index 817e4c66..daecee7e 100644 --- a/fecdec_filter.c +++ b/fecdec_filter.c @@ -117,10 +117,15 @@ static int find_group(struct fec_header *h, FOR_EACH_FECDEC_GROUP(fg, pfd) { if (fg->h.group_num != h->group_num) continue; + if (fg->num_received_slices == 0) + goto success; if (fg->h.slices_per_group != h->slices_per_group) - continue; + return -E_BAD_FEC_HEADER; if (fg->h.data_slices_per_group != h->data_slices_per_group) - continue; + return -E_BAD_FEC_HEADER; + if (fg->h.group_bytes != h->group_bytes) + return -E_BAD_FEC_HEADER; +success: *result = fg; return 1; } @@ -358,7 +363,7 @@ static ssize_t fecdec(char *buf, size_t len, struct filter_node *fn) ret = read_fec_header(buf, len, &h); if (ret <= 0) return ret; - if (!h.slice_bytes || h.slice_bytes > fn->bufsize) + if (!h.slice_bytes) return -E_BAD_SLICE_SIZE; if (h.slice_num > h.slices_per_group) return -E_BAD_SLICE_NUM;