diff options
| author | Daniel Danzberger | 2022-05-10 11:34:03 +0000 |
|---|---|---|
| committer | Hauke Mehrtens | 2022-08-13 15:51:25 +0000 |
| commit | 146bc77c98ace3d1cc672986669650d2e1da71f3 (patch) | |
| tree | 324d93f368b94d17098c8cccd9c7d10575d3c0c2 | |
| parent | de5623104baee6e0c13c92f05c15bf4b4145c0b1 (diff) | |
| download | umbim-146bc77c98ace3d1cc672986669650d2e1da71f3.tar.gz | |
umbim: fix invalid mbim message string encoding
Strings in mbim messages have to follow these formatting rules:
- 4 byte alignment, padded if not.
- utf-16 little endian.
Fixes:
- mbim connect fails with more than 1 string parameter (apn/user/pass)
when they are not 4 byte aligned.
Signed-off-by: Daniel Danzberger <daniel@dd-wrt.com>
| -rw-r--r-- | mbim-msg.c | 10 |
1 files changed, 6 insertions, 4 deletions
@@ -53,8 +53,10 @@ mbim_add_payload(uint8_t len) int mbim_encode_string(struct mbim_string *str, char *in) { - int l = strlen(in); - int s = mbim_add_payload(l * 2); + const int l = strlen(in); + const int utf16_len = l * 2; + const int pad_len = utf16_len % 4; + const int s = mbim_add_payload(utf16_len + pad_len); uint8_t *p = &payload_buffer[s]; int i; @@ -62,14 +64,14 @@ mbim_encode_string(struct mbim_string *str, char *in) return -1; str->offset = htole32(s); - str->length = htole32(l * 2); + str->length = htole32(utf16_len); + for (i = 0; i < l; i++) p[i * 2] = in[i]; return 0; } - char * mbim_get_string(struct mbim_string *str, char *in) { |