mirror of
https://github.com/xemu-project/xemu.git
synced 2025-02-06 12:09:21 +00:00
usb: mtp fixes.
-----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iQIcBAABAgAGBQJcBYkCAAoJEEy22O7T6HE4PHoP/RpxY7q4KXIe2JwKs4j6Ctpf X1+xD7mwQA0QnIXJ0BOQ6gfwFp8HvcHPRqK7ugkWoXRYoE8aKk6XF0fq8ArS7xlR shdJMkfuZwzS9ENFFxl7KHOrq2FbZP0xtTcvybqQ7/Hi97GhUz04hyY2H20bX/FP TsN7athZTwwNTdqOW3HabQlkwlt22Ujvm/8tB1vmA7wBNHN8eIliWFsm9DUDg6Vg m7YzTHybV1tzQJ7SebMHg9sUl6DRtgMKy/sHhxN0eAkop2NpY8ZXQU9K3fq55TEs hhN74OYUMADTWoKIkXD/HlMzO3kOmmjkCRGsEEIXcgvvbuOXpWft+j2xzncrFBII Sr4TVDfGtuk7/YJta6zhty1ZoYdEZBv1tbs4QEF2B/l2Rjcc9HIaX+809yO0IFwx iSiwwkKotuwiMZRdMl4lpxHX2bZrr9jnJkXhFZWbb9CKKkwfZGalle34FBzod/Fa fojQV75RxSgTZB8You+90t16Csex8nJmDKGtEN8ozNUq1WMoD+aHutysKwSgu0wS 2TnajZsrbCMKXbAEAgv6IeYUIz1wEk0ICs0L2hR9llaerrWVJd8e+Hkq0N9VIaQl AiTlwdn+B6aYqG2kgde/HWdLSTb2qsIO23CtN40/gjE62inViQ3gQBprPDEl4YZP 0Aeb3N8+lo1XuZ2fwSg7 =B/En -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/kraxel/tags/fixes-31-20181203-pull-request' into staging usb: mtp fixes. # gpg: Signature made Mon 03 Dec 2018 19:50:26 GMT # gpg: using RSA key 4CB6D8EED3E87138 # gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>" # gpg: aka "Gerd Hoffmann <gerd@kraxel.org>" # gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>" # Primary key fingerprint: A032 8CFF B93A 17A7 9901 FE7D 4CB6 D8EE D3E8 7138 * remotes/kraxel/tags/fixes-31-20181203-pull-request: usb-mtp: outlaw slashes in filenames usb-mtp: fix utf16_to_str Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
933cc4bb34
@ -1593,17 +1593,23 @@ static void usb_mtp_cancel_packet(USBDevice *dev, USBPacket *p)
|
||||
fprintf(stderr, "%s\n", __func__);
|
||||
}
|
||||
|
||||
static void utf16_to_str(uint8_t len, uint16_t *arr, char *name)
|
||||
static char *utf16_to_str(uint8_t len, uint16_t *arr)
|
||||
{
|
||||
int count;
|
||||
wchar_t *wstr = g_new0(wchar_t, len);
|
||||
wchar_t *wstr = g_new0(wchar_t, len + 1);
|
||||
int count, dlen;
|
||||
char *dest;
|
||||
|
||||
for (count = 0; count < len; count++) {
|
||||
/* FIXME: not working for surrogate pairs */
|
||||
wstr[count] = (wchar_t)arr[count];
|
||||
}
|
||||
wstr[count] = 0;
|
||||
|
||||
wcstombs(name, wstr, len);
|
||||
dlen = wcstombs(NULL, wstr, 0) + 1;
|
||||
dest = g_malloc(dlen);
|
||||
wcstombs(dest, wstr, dlen);
|
||||
g_free(wstr);
|
||||
return dest;
|
||||
}
|
||||
|
||||
/* Wrapper around write, returns 0 on failure */
|
||||
@ -1703,7 +1709,7 @@ static void usb_mtp_write_metadata(MTPState *s)
|
||||
{
|
||||
MTPData *d = s->data_out;
|
||||
ObjectInfo *dataset = (ObjectInfo *)d->data;
|
||||
char *filename = g_new0(char, dataset->length);
|
||||
char *filename;
|
||||
MTPObject *o;
|
||||
MTPObject *p = usb_mtp_object_lookup(s, s->dataset.parent_handle);
|
||||
uint32_t next_handle = s->next_handle;
|
||||
@ -1711,7 +1717,13 @@ static void usb_mtp_write_metadata(MTPState *s)
|
||||
assert(!s->write_pending);
|
||||
assert(p != NULL);
|
||||
|
||||
utf16_to_str(dataset->length, dataset->filename, filename);
|
||||
filename = utf16_to_str(dataset->length, dataset->filename);
|
||||
|
||||
if (strchr(filename, '/')) {
|
||||
usb_mtp_queue_result(s, RES_PARAMETER_NOT_SUPPORTED, d->trans,
|
||||
0, 0, 0, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
o = usb_mtp_object_lookup_name(p, filename, dataset->length);
|
||||
if (o != NULL) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user