sr_filter_probes(): Check for too many probes.

Return SR_ERR_ARG if the number of enabled probes is higher than the
requested unit size supports.
This commit is contained in:
Uwe Hermann 2011-12-23 15:26:54 +01:00
parent 488a13b110
commit 7a6ec0c376
1 changed files with 18 additions and 3 deletions

View File

@ -53,6 +53,9 @@
* *
* @param in_unitsize The unit size (>= 1) of the input (data_in). * @param in_unitsize The unit size (>= 1) of the input (data_in).
* @param out_unitsize The unit size (>= 1) the output shall have (data_out). * @param out_unitsize The unit size (>= 1) the output shall have (data_out).
* The requested unit size must be big enough to hold as
* much data as is specified by the number of enabled
* probes in 'probelist'.
* @param probelist Pointer to a list of integers (probe numbers). The probe * @param probelist Pointer to a list of integers (probe numbers). The probe
* numbers in this list are 1-based, i.e. the first probe * numbers in this list are 1-based, i.e. the first probe
* is expected to be numbered 1 (not 0!). Must not be NULL. * is expected to be numbered 1 (not 0!). Must not be NULL.
@ -98,15 +101,27 @@ int sr_filter_probes(int in_unitsize, int out_unitsize, const int *probelist,
return SR_ERR_ARG; return SR_ERR_ARG;
} }
if (!(*data_out = g_try_malloc(length_in))) { if (!length_out) {
sr_err("filter: %s: data_out malloc failed", __func__); sr_err("filter: %s: length_out was NULL", __func__);
return SR_ERR_MALLOC; return SR_ERR_ARG;
} }
num_enabled_probes = 0; num_enabled_probes = 0;
for (i = 0; probelist[i]; i++) for (i = 0; probelist[i]; i++)
num_enabled_probes++; num_enabled_probes++;
/* Are there more probes than the target unit size supports? */
if (num_enabled_probes > out_unitsize * 8) {
sr_err("filter: %s: too many probes (%d) for the target unit "
"size (%d)", num_enabled_probes, out_unitsize, __func__);
return SR_ERR_ARG;
}
if (!(*data_out = g_try_malloc(length_in))) {
sr_err("filter: %s: data_out malloc failed", __func__);
return SR_ERR_MALLOC;
}
if (num_enabled_probes == in_unitsize * 8) { if (num_enabled_probes == in_unitsize * 8) {
/* All probes are used -- no need to compress anything. */ /* All probes are used -- no need to compress anything. */
memcpy(*data_out, data_in, length_in); memcpy(*data_out, data_in, length_in);