[PATCH] umbim: fix invalid mbim message string encoding
Daniel Danzberger
daniel at dd-wrt.com
Tue May 10 04:23:02 PDT 2022
On Tue, 2022-05-10 at 12:57 +0200, Bjørn Mork wrote:
> Unless otherwise specified, all strings use UNICODE UTF-16LE
> encodings limited to characters from the Basic Multilingual
> Plane. Strings shall not be terminated by a NULL character.
>
> > + /* convert to utf-16 little endian */
> > for (i = 0; i < l; i++)
> > - p[i * 2] = in[i];
> > + p[i * 2] = htole16(in[i]);
> >
> > return 0;
> > }
>
>
> This new code is buggy. It fails on BE and makes no difference on
> LE. Both p and in are byte arrays. The byte you write into p on a BE
> system will be aither 0x00 or 0xff depending on the MSB of in[i].
True, I will remove that le16 conversion part and retest.
>
> The previous code was sort of correct, assuming that the input is mostly
> ascii mapping to the same value in unicode. Ideally we should do real
> utf16le conversion of the input. But then someone has to decide if the
> input is utf8 or something else first. And you need a real utf16
> implementation. Not sure it's worth it. Did you ever see an operator
> use a non-ascii APN, username, password or pin code?
Agree, it's best for now to just leave it as is.
--
Regards
Daniel Danzberger
embeDD GmbH, Alter Postplatz 2, CH-6370 Stans
More information about the openwrt-devel
mailing list