Ordinarily a miniflow will use its inline_values if its values can fit, but
there is nothing to prevent a small number of values from being stored
in malloc()'d memory. If this happened, then miniflow_move() would leak
memory. This commit fixes the problem.
This is a hypothetical problem. I haven't seen it in practice.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Ethan Jackson <ethan@nicira.com>
void
miniflow_move(struct miniflow *dst, struct miniflow *src)
{
- int n = miniflow_n_values(src);
- if (n <= MINI_N_INLINE) {
+ if (src->values == src->inline_values) {
dst->values = dst->inline_values;
- memcpy(dst->values, src->values, n * sizeof *dst->values);
+ memcpy(dst->values, src->values,
+ miniflow_n_values(src) * sizeof *dst->values);
} else {
dst->values = src->values;
}