[Spice-devel] [PATCH] server/smartcard: fix smartcard_channel_send_error
Hans de Goede
hdegoede at redhat.com
Fri Jul 22 09:04:12 PDT 2011
Ack.
On 07/22/2011 05:01 PM, Alon Levy wrote:
> It was sending the wrong data, the memory right after the VCSMsgHeader
> which was actually not where the data was.
>
> Fixed by having the header and data (VSCError, 4 bytes of the error code)
> embedded in the ErrorItem pipe item.
> ---
> server/smartcard.c | 33 ++++++++-------------------------
> 1 files changed, 8 insertions(+), 25 deletions(-)
>
> diff --git a/server/smartcard.c b/server/smartcard.c
> index 49bf3cb..3f59317 100644
> --- a/server/smartcard.c
> +++ b/server/smartcard.c
> @@ -45,8 +45,8 @@ enum {
>
> typedef struct ErrorItem {
> PipeItem base;
> - uint32_t reader_id;
> - uint32_t error;
> + VSCMsgHeader vheader;
> + VSCMsgError error;
> } ErrorItem;
>
> typedef struct MsgItem {
> @@ -286,6 +286,7 @@ static void smartcard_channel_send_data(RedChannel *channel, SpiceMarshaller *m,
> ASSERT(channel);
> ASSERT(vheader);
> red_channel_init_send_data(channel, SPICE_MSG_SMARTCARD_DATA, item);
> +
> spice_marshaller_add_ref(m, (uint8_t*)vheader, sizeof(VSCMsgHeader));
> if (vheader->length> 0) {
> spice_marshaller_add_ref(m, (uint8_t*)(vheader+1), vheader->length);
> @@ -293,32 +294,12 @@ static void smartcard_channel_send_data(RedChannel *channel, SpiceMarshaller *m,
> red_channel_begin_send_message(channel);
> }
>
> -static void smartcard_channel_send_message(RedChannel *channel, SpiceMarshaller *m,
> - PipeItem *item, uint32_t reader_id, VSCMsgType type, uint8_t* data, uint32_t len)
> -{
> - VSCMsgHeader mhHeader;
> - //SpiceMarshaller* m = msg->marshaller();
> -
> - mhHeader.type = type;
> - mhHeader.length = len;
> - mhHeader.reader_id = reader_id;
> - //_marshallers->msg_SpiceMsgData(m,&msgdata);
> - //spice_marshaller_add(m, (uint8_t*)&mhHeader, sizeof(mhHeader));
> - //spice_marshaller_add(m, data, len);
> - //marshaller_outgoing_write(msg);
> -
> - smartcard_channel_send_data(channel, m, item,&mhHeader);
> -}
> -
> static void smartcard_channel_send_error(
> SmartCardChannel *smartcard_channel, SpiceMarshaller *m, PipeItem *item)
> {
> ErrorItem* error_item = (ErrorItem*)item;
> - VSCMsgError error;
>
> - error.code = error_item->error;
> - smartcard_channel_send_message(&smartcard_channel->base, m, item,
> - error_item->reader_id, VSC_Error, (uint8_t*)&error, sizeof(error));
> + smartcard_channel_send_data(&smartcard_channel->base, m, item,&error_item->vheader);
> }
>
> static void smartcard_channel_send_msg(
> @@ -372,8 +353,10 @@ static void smartcard_push_error(SmartCardChannel* channel, uint32_t reader_id,
> ErrorItem *error_item = spice_new0(ErrorItem, 1);
>
> error_item->base.type = PIPE_ITEM_TYPE_ERROR;
> - error_item->reader_id = reader_id;
> - error_item->error = error;
> + error_item->vheader.reader_id = reader_id;
> + error_item->vheader.type = VSC_Error;
> + error_item->vheader.length = sizeof(error_item->error);
> + error_item->error.code = error;
> smartcard_channel_pipe_add_push(channel,&error_item->base);
> }
>
More information about the Spice-devel
mailing list