diff options
author | Denis Kenzior <denkenz@gmail.com> | 2017-11-07 12:36:11 -0600 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2017-11-08 21:02:22 -0600 |
commit | 1bf22999e594faf75c96d1b9a53c1b1f8b87a345 (patch) | |
tree | d8d89fffcb8080603374b6ccc1dd88794b64ec05 /unit | |
parent | bae2843eac0fecb4ec3427db197d31d3c48ee301 (diff) | |
download | ofono-1bf22999e594faf75c96d1b9a53c1b1f8b87a345.tar.gz |
unit: Fix fragmenting messages < frag_size
Diffstat (limited to 'unit')
-rw-r--r-- | unit/test-mbim.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/unit/test-mbim.c b/unit/test-mbim.c index 801b1e8e..4c1a021f 100644 --- a/unit/test-mbim.c +++ b/unit/test-mbim.c @@ -134,7 +134,7 @@ static void do_debug(const char *str, void *user_data) static struct mbim_message *build_message(const struct message_data *msg_data) { - static const int frag_size = 64; + static const unsigned int frag_size = 64; struct mbim_message *msg; struct iovec *iov; size_t n_iov; @@ -143,9 +143,14 @@ static struct mbim_message *build_message(const struct message_data *msg_data) n_iov = align_len(msg_data->binary_len, frag_size) / frag_size; iov = l_new(struct iovec, n_iov); - iov[0].iov_len = frag_size - 20; + iov[0].iov_len = msg_data->binary_len < frag_size ? + msg_data->binary_len - 20 : + frag_size - 20; iov[0].iov_base = l_memdup(msg_data->binary + 20, iov[0].iov_len); + if (n_iov == 1) + goto done; + for (i = 1; i < n_iov - 1; i++) { iov[i].iov_base = l_memdup(msg_data->binary + i * frag_size, frag_size); @@ -156,6 +161,7 @@ static struct mbim_message *build_message(const struct message_data *msg_data) iov[i].iov_base = l_memdup(msg_data->binary + i * frag_size, iov[i].iov_len); +done: msg = _mbim_message_build(msg_data->binary, iov, n_iov); assert(msg); |