ui/clipboard: add asserts for update and request
Should an issue like CVE-2023-6683 ever appear again in the future, it will be more obvious which assumption was violated. Suggested-by: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: Fiona Ebner <f.ebner@proxmox.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-ID: <20240124105749.204610-2-f.ebner@proxmox.com>
This commit is contained in:
parent
405484b29f
commit
9c41658261
@ -65,12 +65,24 @@ bool qemu_clipboard_check_serial(QemuClipboardInfo *info, bool client)
|
|||||||
|
|
||||||
void qemu_clipboard_update(QemuClipboardInfo *info)
|
void qemu_clipboard_update(QemuClipboardInfo *info)
|
||||||
{
|
{
|
||||||
|
uint32_t type;
|
||||||
QemuClipboardNotify notify = {
|
QemuClipboardNotify notify = {
|
||||||
.type = QEMU_CLIPBOARD_UPDATE_INFO,
|
.type = QEMU_CLIPBOARD_UPDATE_INFO,
|
||||||
.info = info,
|
.info = info,
|
||||||
};
|
};
|
||||||
assert(info->selection < QEMU_CLIPBOARD_SELECTION__COUNT);
|
assert(info->selection < QEMU_CLIPBOARD_SELECTION__COUNT);
|
||||||
|
|
||||||
|
for (type = 0; type < QEMU_CLIPBOARD_TYPE__COUNT; type++) {
|
||||||
|
/*
|
||||||
|
* If data is missing, the clipboard owner's 'request' callback needs to
|
||||||
|
* be set. Otherwise, there is no way to get the clipboard data and
|
||||||
|
* qemu_clipboard_request() cannot be called.
|
||||||
|
*/
|
||||||
|
if (info->types[type].available && !info->types[type].data) {
|
||||||
|
assert(info->owner && info->owner->request);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
notifier_list_notify(&clipboard_notifiers, ¬ify);
|
notifier_list_notify(&clipboard_notifiers, ¬ify);
|
||||||
|
|
||||||
if (cbinfo[info->selection] != info) {
|
if (cbinfo[info->selection] != info) {
|
||||||
@ -132,6 +144,8 @@ void qemu_clipboard_request(QemuClipboardInfo *info,
|
|||||||
!info->owner)
|
!info->owner)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
assert(info->owner->request);
|
||||||
|
|
||||||
info->types[type].requested = true;
|
info->types[type].requested = true;
|
||||||
info->owner->request(info, type);
|
info->owner->request(info, type);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user