mirror of
https://gitlab.freedesktop.org/wayland/wayland.git
synced 2025-11-02 09:01:39 -05:00
Marshall NULL strings without crashing
This commit is contained in:
parent
4eb536091a
commit
3bbbd15c65
1 changed files with 12 additions and 8 deletions
20
connection.c
20
connection.c
|
|
@ -338,7 +338,7 @@ wl_connection_vmarshal(struct wl_connection *connection,
|
||||||
break;
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
s = va_arg(ap, const char *);
|
s = va_arg(ap, const char *);
|
||||||
length = strlen(s);
|
length = s ? strlen(s) : 0;
|
||||||
*p++ = length;
|
*p++ = length;
|
||||||
memcpy(p, s, length);
|
memcpy(p, s, length);
|
||||||
p += DIV_ROUNDUP(length, sizeof(*p));
|
p += DIV_ROUNDUP(length, sizeof(*p));
|
||||||
|
|
@ -456,14 +456,18 @@ wl_connection_demarshal(struct wl_connection *connection,
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
values[i].string = malloc(length + 1);
|
if (length == 0) {
|
||||||
if (values[i].string == NULL) {
|
values[i].string = NULL;
|
||||||
errno = ENOMEM;
|
} else {
|
||||||
ret = -1;
|
values[i].string = malloc(length + 1);
|
||||||
goto out;
|
if (values[i].string == NULL) {
|
||||||
|
errno = ENOMEM;
|
||||||
|
ret = -1;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
memcpy(values[i].string, p, length);
|
||||||
|
values[i].string[length] = '\0';
|
||||||
}
|
}
|
||||||
memcpy(values[i].string, p, length);
|
|
||||||
values[i].string[length] = '\0';
|
|
||||||
p = next;
|
p = next;
|
||||||
break;
|
break;
|
||||||
case 'o':
|
case 'o':
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue