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;
}
}
if (!group_complete(oldest) && !group_empty(oldest))
PARA_WARNING_LOG("Clearing incomplete group %d "
- "(contains %d slices)\n", fg->h.group_num,
- fg->num_received_slices);
+ "(contains %d slices)\n", oldest->h.group_num,
+ oldest->num_received_slices);
clear_group(oldest);
return oldest;
}
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;