[Spice-commits] src/channel-display.c

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Aug 20 14:59:50 UTC 2019


 src/channel-display.c |   10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

New commits:
commit 341d3725570fa78392ebdefc6011c604883eae35
Author: Kevin Pouget <kpouget at redhat.com>
Date:   Tue Aug 20 16:55:18 2019 +0200

    channel-display: fix bug when sending preferred video codecs
    
    The transfer between the codecs array and the message payload cannot
    be done with memcpy because the data-types are different
    (gint/uint8_t).
    
    Signed-off-by: Kevin Pouget <kpouget at redhat.com>
    Acked-by: Frediano Ziglio <fziglio at redhat.com>

diff --git a/src/channel-display.c b/src/channel-display.c
index 44555e3..59c809d 100644
--- a/src/channel-display.c
+++ b/src/channel-display.c
@@ -615,11 +615,17 @@ static void spice_display_send_client_preferred_video_codecs(SpiceChannel *chann
 {
     SpiceMsgOut *out;
     SpiceMsgcDisplayPreferredVideoCodecType *msg;
+    int i;
 
     msg = g_malloc0(sizeof(SpiceMsgcDisplayPreferredVideoCodecType) +
-                    (sizeof(SpiceVideoCodecType) * ncodecs));
+                    (sizeof(msg->codecs[0]) * ncodecs));
     msg->num_of_codecs = ncodecs;
-    memcpy(msg->codecs, codecs, sizeof(*codecs) * ncodecs);
+
+    /* cannot memcpy because codecs is gint, but msg->codecs is uint8_t
+     * but safe because SpiceVideoCodecType <= 255 */
+    for (i = 0; i < ncodecs; i++) {
+        msg->codecs[i] = codecs[i];
+    }
 
     out = spice_msg_out_new(channel, SPICE_MSGC_DISPLAY_PREFERRED_VIDEO_CODEC_TYPE);
     out->marshallers->msgc_display_preferred_video_codec_type(out->marshaller, msg);


More information about the Spice-commits mailing list