server/shadow: Integrate comment from @hardening: use switch to handle different...
authorzihao.jiang <zihao.jiang@yahoo.com>
Mon, 15 Jun 2015 15:54:30 +0000 (23:54 +0800)
committerzihao.jiang <zihao.jiang@yahoo.com>
Mon, 15 Jun 2015 15:54:30 +0000 (23:54 +0800)
server/shadow/Mac/mac_shadow.c
server/shadow/X11/x11_shadow.c
server/shadow/shadow_client.c

index f4e25c9..d3fbb77 100644 (file)
@@ -452,48 +452,56 @@ int mac_shadow_screen_grab(macShadowSubsystem* subsystem)
 
 int mac_shadow_subsystem_process_message(macShadowSubsystem* subsystem, wMessage* message)
 {
-       if (message->id == SHADOW_MSG_IN_REFRESH_OUTPUT_ID)
+       switch(message->id)
        {
-               UINT32 index;
-               SHADOW_MSG_IN_REFRESH_OUTPUT* msg = (SHADOW_MSG_IN_REFRESH_OUTPUT*) message->wParam;
-               
-               if (msg->numRects)
+               case SHADOW_MSG_IN_REFRESH_OUTPUT_ID:
                {
-                       for (index = 0; index < msg->numRects; index++)
+                       UINT32 index;
+                       SHADOW_MSG_IN_REFRESH_OUTPUT* msg = (SHADOW_MSG_IN_REFRESH_OUTPUT*) message->wParam;
+
+                       if (msg->numRects)
                        {
+                               for (index = 0; index < msg->numRects; index++)
+                               {
+                                       region16_union_rect(&(subsystem->invalidRegion),
+                                                       &(subsystem->invalidRegion), &msg->rects[index]);
+                               }
+                       }
+                       else
+                       {
+                               RECTANGLE_16 refreshRect;
+
+                               refreshRect.left = 0;
+                               refreshRect.top = 0;
+                               refreshRect.right = subsystem->width;
+                               refreshRect.bottom = subsystem->height;
+
                                region16_union_rect(&(subsystem->invalidRegion),
-                                                   &(subsystem->invalidRegion), &msg->rects[index]);
+                                                       &(subsystem->invalidRegion), &refreshRect);
                        }
+                       break;
                }
-               else
+               case SHADOW_MSG_IN_SUPPRESS_OUTPUT_ID:
                {
-                       RECTANGLE_16 refreshRect;
-                       
-                       refreshRect.left = 0;
-                       refreshRect.top = 0;
-                       refreshRect.right = subsystem->width;
-                       refreshRect.bottom = subsystem->height;
-                       
-                       region16_union_rect(&(subsystem->invalidRegion),
-                                           &(subsystem->invalidRegion), &refreshRect);
-               }
-       }
-       else if (message->id == SHADOW_MSG_IN_SUPPRESS_OUTPUT_ID)
-       {
-               SHADOW_MSG_IN_SUPPRESS_OUTPUT* msg = (SHADOW_MSG_IN_SUPPRESS_OUTPUT*) message->wParam;
-               
-               subsystem->suppressOutput = (msg->allow) ? FALSE : TRUE;
-               
-               if (msg->allow)
-               {
-                       region16_union_rect(&(subsystem->invalidRegion),
-                                           &(subsystem->invalidRegion), &(msg->rect));
+                       SHADOW_MSG_IN_SUPPRESS_OUTPUT* msg = (SHADOW_MSG_IN_SUPPRESS_OUTPUT*) message->wParam;
+
+                       subsystem->suppressOutput = (msg->allow) ? FALSE : TRUE;
+
+                       if (msg->allow)
+                       {
+                               region16_union_rect(&(subsystem->invalidRegion),
+                                                       &(subsystem->invalidRegion), &(msg->rect));
+                       }
+                       break;
                }
+               default:
+                       WLog_ERR(TAG, "Unknown message id: %u", message->id);
+                       break;
        }
-       
+
        if (message->Free)
                message->Free(message);
-       
+
        return 1;
 }
 
index 9d67793..c297683 100644 (file)
@@ -350,14 +350,21 @@ void x11_shadow_input_extended_mouse_event(x11ShadowSubsystem* subsystem, UINT16
 
 static void x11_shadow_message_free(UINT32 id, SHADOW_MSG_OUT* msg)
 {
-       if (id == SHADOW_MSG_OUT_POINTER_POSITION_UPDATE_ID)
+       switch(id)
        {
-               free(msg);
-       }
-       else if (id == SHADOW_MSG_OUT_POINTER_ALPHA_UPDATE_ID)
-       {
-               free(((SHADOW_MSG_OUT_POINTER_ALPHA_UPDATE*)msg)->pixels);
-               free(msg);
+               case SHADOW_MSG_OUT_POINTER_POSITION_UPDATE_ID:
+                       free(msg);
+                       break;
+
+               case SHADOW_MSG_OUT_POINTER_ALPHA_UPDATE_ID:
+                       free(((SHADOW_MSG_OUT_POINTER_ALPHA_UPDATE*)msg)->pixels);
+                       free(msg);
+                       break;
+
+               default:
+                       WLog_ERR(TAG, "Unknown message id: %u", id);
+                       free(msg);
+                       break;
        }
 }
 
@@ -743,43 +750,51 @@ int x11_shadow_screen_grab(x11ShadowSubsystem* subsystem)
 
 int x11_shadow_subsystem_process_message(x11ShadowSubsystem* subsystem, wMessage* message)
 {
-       if (message->id == SHADOW_MSG_IN_REFRESH_OUTPUT_ID)
+       switch(message->id)
        {
-               UINT32 index;
-               SHADOW_MSG_IN_REFRESH_OUTPUT* msg = (SHADOW_MSG_IN_REFRESH_OUTPUT*) message->wParam;
-
-               if (msg->numRects)
+               case SHADOW_MSG_IN_REFRESH_OUTPUT_ID:
                {
-                       for (index = 0; index < msg->numRects; index++)
+                       UINT32 index;
+                       SHADOW_MSG_IN_REFRESH_OUTPUT* msg = (SHADOW_MSG_IN_REFRESH_OUTPUT*) message->wParam;
+
+                       if (msg->numRects)
                        {
-                               region16_union_rect(&(subsystem->invalidRegion),
-                                               &(subsystem->invalidRegion), &msg->rects[index]);
+                               for (index = 0; index < msg->numRects; index++)
+                               {
+                                       region16_union_rect(&(subsystem->invalidRegion),
+                                                       &(subsystem->invalidRegion), &msg->rects[index]);
+                               }
                        }
-               }
-               else
-               {
-                       RECTANGLE_16 refreshRect;
+                       else
+                       {
+                               RECTANGLE_16 refreshRect;
 
-                       refreshRect.left = 0;
-                       refreshRect.top = 0;
-                       refreshRect.right = subsystem->width;
-                       refreshRect.bottom = subsystem->height;
+                               refreshRect.left = 0;
+                               refreshRect.top = 0;
+                               refreshRect.right = subsystem->width;
+                               refreshRect.bottom = subsystem->height;
 
-                       region16_union_rect(&(subsystem->invalidRegion),
-                                               &(subsystem->invalidRegion), &refreshRect);
+                               region16_union_rect(&(subsystem->invalidRegion),
+                                                       &(subsystem->invalidRegion), &refreshRect);
+                       }
+                       break;
                }
-       }
-       else if (message->id == SHADOW_MSG_IN_SUPPRESS_OUTPUT_ID)
-       {
-               SHADOW_MSG_IN_SUPPRESS_OUTPUT* msg = (SHADOW_MSG_IN_SUPPRESS_OUTPUT*) message->wParam;
+               case SHADOW_MSG_IN_SUPPRESS_OUTPUT_ID:
+               {
+                       SHADOW_MSG_IN_SUPPRESS_OUTPUT* msg = (SHADOW_MSG_IN_SUPPRESS_OUTPUT*) message->wParam;
 
-               subsystem->suppressOutput = (msg->allow) ? FALSE : TRUE;
+                       subsystem->suppressOutput = (msg->allow) ? FALSE : TRUE;
 
-               if (msg->allow)
-               {
-                       region16_union_rect(&(subsystem->invalidRegion),
-                                               &(subsystem->invalidRegion), &(msg->rect));
+                       if (msg->allow)
+                       {
+                               region16_union_rect(&(subsystem->invalidRegion),
+                                                       &(subsystem->invalidRegion), &(msg->rect));
+                       }
+                       break;
                }
+               default:
+                       WLog_ERR(TAG, "Unknown message id: %u", message->id);
+                       break;
        }
 
        if (message->Free)
index 4ed6446..17c36fa 100644 (file)
@@ -165,17 +165,21 @@ void shadow_client_context_free(freerdp_peer* peer, rdpShadowClient* client)
 
 void shadow_client_message_free(wMessage* message)
 {
-       if (message->id == SHADOW_MSG_IN_REFRESH_OUTPUT_ID)
+       switch(message->id)
        {
-               SHADOW_MSG_IN_REFRESH_OUTPUT* wParam = (SHADOW_MSG_IN_REFRESH_OUTPUT*) message->wParam;
-
-               free(wParam->rects);
-               free(wParam);
-       }
-       else if (message->id == SHADOW_MSG_IN_SUPPRESS_OUTPUT_ID)
-       {
-               SHADOW_MSG_IN_SUPPRESS_OUTPUT* wParam = (SHADOW_MSG_IN_SUPPRESS_OUTPUT*) message->wParam;
-               free(wParam);
+               case SHADOW_MSG_IN_REFRESH_OUTPUT_ID:
+                       free(((SHADOW_MSG_IN_REFRESH_OUTPUT*)message->wParam)->rects);
+                       free(message->wParam);
+                       break;
+
+               case SHADOW_MSG_IN_SUPPRESS_OUTPUT_ID:
+                       free(message->wParam);
+                       break;
+
+               default:
+                       WLog_ERR(TAG, "Unknown message id: %u", message->id);
+                       free(message->wParam);
+                       break;
        }
 }
 
@@ -894,73 +898,83 @@ int shadow_client_subsystem_process_message(rdpShadowClient* client, wMessage* m
 
        /* FIXME: the pointer updates appear to be broken when used with bulk compression and mstsc */
 
-       if (message->id == SHADOW_MSG_OUT_POINTER_POSITION_UPDATE_ID)
+       switch(message->id)
        {
-               POINTER_POSITION_UPDATE pointerPosition;
-               SHADOW_MSG_OUT_POINTER_POSITION_UPDATE* msg = (SHADOW_MSG_OUT_POINTER_POSITION_UPDATE*) message->wParam;
+               case SHADOW_MSG_OUT_POINTER_POSITION_UPDATE_ID:
+               {
+                       POINTER_POSITION_UPDATE pointerPosition;
+                       SHADOW_MSG_OUT_POINTER_POSITION_UPDATE* msg = (SHADOW_MSG_OUT_POINTER_POSITION_UPDATE*) message->wParam;
 
-               pointerPosition.xPos = msg->xPos;
-               pointerPosition.yPos = msg->yPos;
+                       pointerPosition.xPos = msg->xPos;
+                       pointerPosition.yPos = msg->yPos;
 
-               if (client->activated)
-               {
-                       if ((msg->xPos != client->pointerX) || (msg->yPos != client->pointerY))
+                       if (client->activated)
                        {
-                               IFCALL(update->pointer->PointerPosition, context, &pointerPosition);
+                               if ((msg->xPos != client->pointerX) || (msg->yPos != client->pointerY))
+                               {
+                                       IFCALL(update->pointer->PointerPosition, context, &pointerPosition);
 
-                               client->pointerX = msg->xPos;
-                               client->pointerY = msg->yPos;
+                                       client->pointerX = msg->xPos;
+                                       client->pointerY = msg->yPos;
+                               }
                        }
+                       break;
                }
-       }
-       else if (message->id == SHADOW_MSG_OUT_POINTER_ALPHA_UPDATE_ID)
-       {
-               POINTER_NEW_UPDATE pointerNew;
-               POINTER_COLOR_UPDATE* pointerColor;
-               POINTER_CACHED_UPDATE pointerCached;
-               SHADOW_MSG_OUT_POINTER_ALPHA_UPDATE* msg = (SHADOW_MSG_OUT_POINTER_ALPHA_UPDATE*) message->wParam;
+               case SHADOW_MSG_OUT_POINTER_ALPHA_UPDATE_ID:
+               {
+                       POINTER_NEW_UPDATE pointerNew;
+                       POINTER_COLOR_UPDATE* pointerColor;
+                       POINTER_CACHED_UPDATE pointerCached;
+                       SHADOW_MSG_OUT_POINTER_ALPHA_UPDATE* msg = (SHADOW_MSG_OUT_POINTER_ALPHA_UPDATE*) message->wParam;
 
-               ZeroMemory(&pointerNew, sizeof(POINTER_NEW_UPDATE));
+                       ZeroMemory(&pointerNew, sizeof(POINTER_NEW_UPDATE));
 
-               pointerNew.xorBpp = 24;
-               pointerColor = &(pointerNew.colorPtrAttr);
+                       pointerNew.xorBpp = 24;
+                       pointerColor = &(pointerNew.colorPtrAttr);
 
-               pointerColor->cacheIndex = 0;
-               pointerColor->xPos = msg->xHot;
-               pointerColor->yPos = msg->yHot;
-               pointerColor->width = msg->width;
-               pointerColor->height = msg->height;
+                       pointerColor->cacheIndex = 0;
+                       pointerColor->xPos = msg->xHot;
+                       pointerColor->yPos = msg->yHot;
+                       pointerColor->width = msg->width;
+                       pointerColor->height = msg->height;
 
-               pointerCached.cacheIndex = pointerColor->cacheIndex;
+                       pointerCached.cacheIndex = pointerColor->cacheIndex;
 
-               if (client->activated)
-               {
-                       shadow_client_convert_alpha_pointer_data(msg->pixels, msg->premultiplied,
-                                       msg->width, msg->height, pointerColor);
+                       if (client->activated)
+                       {
+                               shadow_client_convert_alpha_pointer_data(msg->pixels, msg->premultiplied,
+                                               msg->width, msg->height, pointerColor);
 
-                       IFCALL(update->pointer->PointerNew, context, &pointerNew);
-                       IFCALL(update->pointer->PointerCached, context, &pointerCached);
+                               IFCALL(update->pointer->PointerNew, context, &pointerNew);
+                               IFCALL(update->pointer->PointerCached, context, &pointerCached);
 
-                       free(pointerColor->xorMaskData);
-                       free(pointerColor->andMaskData);
+                               free(pointerColor->xorMaskData);
+                               free(pointerColor->andMaskData);
+                       }
+                       break;
                }
-       }
-       else if (message->id == SHADOW_MSG_OUT_AUDIO_OUT_SAMPLES_ID)
-       {
-               SHADOW_MSG_OUT_AUDIO_OUT_SAMPLES* msg = (SHADOW_MSG_OUT_AUDIO_OUT_SAMPLES*) message->wParam;
-               if (client->activated && client->rdpsnd && client->rdpsnd->Activated)
+               case SHADOW_MSG_OUT_AUDIO_OUT_SAMPLES_ID:
                {
-                       client->rdpsnd->src_format = msg->audio_format;
-                       IFCALL(client->rdpsnd->SendSamples, client->rdpsnd, msg->buf, msg->nFrames, msg->wTimestamp);
+                       SHADOW_MSG_OUT_AUDIO_OUT_SAMPLES* msg = (SHADOW_MSG_OUT_AUDIO_OUT_SAMPLES*) message->wParam;
+                       if (client->activated && client->rdpsnd && client->rdpsnd->Activated)
+                       {
+                               client->rdpsnd->src_format = msg->audio_format;
+                               IFCALL(client->rdpsnd->SendSamples, client->rdpsnd, msg->buf, msg->nFrames, msg->wTimestamp);
+                       }
+                       break;
                }
-       }
-       else if (message->id == SHADOW_MSG_OUT_AUDIO_OUT_VOLUME_ID)
-       {
-               SHADOW_MSG_OUT_AUDIO_OUT_VOLUME* msg = (SHADOW_MSG_OUT_AUDIO_OUT_VOLUME*) message->wParam;
-               if (client->activated && client->rdpsnd && client->rdpsnd->Activated)
+               case SHADOW_MSG_OUT_AUDIO_OUT_VOLUME_ID:
                {
-                       IFCALL(client->rdpsnd->SetVolume, client->rdpsnd, msg->left, msg->right);
+                       SHADOW_MSG_OUT_AUDIO_OUT_VOLUME* msg = (SHADOW_MSG_OUT_AUDIO_OUT_VOLUME*) message->wParam;
+                       if (client->activated && client->rdpsnd && client->rdpsnd->Activated)
+                       {
+                               IFCALL(client->rdpsnd->SetVolume, client->rdpsnd, msg->left, msg->right);
+                       }
+                       break;
                }
+               default:
+                       WLog_ERR(TAG, "Unknown message id: %u", message->id);
+                       break;
        }
 
        shadow_client_free_queued_message(message);
@@ -1090,27 +1104,30 @@ void* shadow_client_thread(rdpShadowClient* client)
                                {
                                        break;
                                }
-                               else if (message.id == SHADOW_MSG_OUT_POINTER_POSITION_UPDATE_ID)
-                               {
-                                       /* Abandon previous message */
-                                       shadow_client_free_queued_message(&pointerPositionMsg);
-                                       CopyMemory(&pointerPositionMsg, &message, sizeof(wMessage));
-                               }
-                               else if (message.id == SHADOW_MSG_OUT_POINTER_ALPHA_UPDATE_ID)
-                               {
-                                       /* Abandon previous message */
-                                       shadow_client_free_queued_message(&pointerAlphaMsg);
-                                       CopyMemory(&pointerAlphaMsg, &message, sizeof(wMessage));
-                               }
-                               else if (message.id == SHADOW_MSG_OUT_AUDIO_OUT_VOLUME_ID)
-                               {
-                                       /* Abandon previous message */
-                                       shadow_client_free_queued_message(&audioVolumeMsg);
-                                       CopyMemory(&audioVolumeMsg, &message, sizeof(wMessage));
-                               }
-                               else
+
+                               switch(message.id)
                                {
-                                       shadow_client_subsystem_process_message(client, &message);
+                                       case SHADOW_MSG_OUT_POINTER_POSITION_UPDATE_ID:
+                                               /* Abandon previous message */
+                                               shadow_client_free_queued_message(&pointerPositionMsg);
+                                               CopyMemory(&pointerPositionMsg, &message, sizeof(wMessage));
+                                               break;
+
+                                       case SHADOW_MSG_OUT_POINTER_ALPHA_UPDATE_ID:
+                                               /* Abandon previous message */
+                                               shadow_client_free_queued_message(&pointerAlphaMsg);
+                                               CopyMemory(&pointerAlphaMsg, &message, sizeof(wMessage));
+                                               break;
+
+                                       case SHADOW_MSG_OUT_AUDIO_OUT_VOLUME_ID:
+                                               /* Abandon previous message */
+                                               shadow_client_free_queued_message(&audioVolumeMsg);
+                                               CopyMemory(&audioVolumeMsg, &message, sizeof(wMessage));
+                                               break;
+
+                                       default:
+                                               shadow_client_subsystem_process_message(client, &message);
+                                               break;
                                }
                        }