@@ -1177,23 +1177,35 @@ static int fetch_qubes_clipboard_using_qrexec(Ghandles * g) {
1177
1177
1178
1178
/* lock already taken in is_special_keypress() */
1179
1179
static int paste_qubes_clipboard_using_qrexec (Ghandles * g ) {
1180
+ struct stat statbuf ;
1180
1181
int ret ;
1181
1182
struct clipboard_metadata metadata = {0 };
1183
+ strcpy (metadata .vmname , g -> vmname );
1184
+ metadata .paste_action = true;
1185
+ metadata .qrexec_clipboard = true;
1186
+ metadata .xevent_timestamp = g -> clipboard_xevent_time ;
1187
+ metadata .buffer_size = g -> clipboard_buffer_size ;
1188
+ metadata .protocol_version_vmside = g -> protocol_version ;
1189
+ metadata .protocol_version_xside = PROTOCOL_VERSION (
1190
+ PROTOCOL_VERSION_MAJOR , PROTOCOL_VERSION_MINOR );
1191
+ metadata .successful = false;
1192
+
1193
+ /* Query clipboard file stat to determine its size for metadata */
1194
+ if (stat (QUBES_CLIPBOARD_FILENAME , & statbuf )) {
1195
+ show_error_message (g , "secure paste: failed to get status of " QUBES_CLIPBOARD_FILENAME );
1196
+ clear_clipboard (& metadata );
1197
+ return -1 ;
1198
+ }
1199
+ metadata .sent_size = statbuf .st_size ;
1182
1200
1183
1201
ret = run_clipboard_rpc (g , CLIPBOARD_PASTE );
1184
1202
if (ret ) {
1185
- strcpy (metadata .vmname , g -> vmname );
1186
- metadata .paste_action = true;
1187
- metadata .qrexec_clipboard = true;
1188
- metadata .xevent_timestamp = g -> clipboard_xevent_time ;
1189
- metadata .buffer_size = g -> clipboard_buffer_size ;
1190
- metadata .protocol_version_vmside = g -> protocol_version ;
1191
- metadata .protocol_version_xside = PROTOCOL_VERSION (
1192
- PROTOCOL_VERSION_MAJOR , PROTOCOL_VERSION_MINOR );
1193
1203
metadata .successful = true;
1194
- clear_clipboard (& metadata );
1204
+ } else {
1205
+ metadata .successful = false;
1195
1206
}
1196
1207
1208
+ clear_clipboard (& metadata );
1197
1209
return ret ;
1198
1210
}
1199
1211
0 commit comments