VirtualBox

Ignore:
Timestamp:
Jan 31, 2023 10:56:27 AM (2 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
155595
Message:

HostServices/HostChannel: Address two todos

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostServices/HostChannel/VBoxHostChannelSvc.cpp

    r98103 r98358  
    245245
    246246            if (cParms != 3)
    247             {
    248                 rc = VERR_INVALID_PARAMETER;
    249             }
     247                rc = VERR_INVALID_PARAMETER;
    250248            else if (   paParms[0].type != VBOX_HGCM_SVC_PARM_PTR     /* name */
    251249                     || paParms[1].type != VBOX_HGCM_SVC_PARM_32BIT   /* flags */
    252250                     || paParms[2].type != VBOX_HGCM_SVC_PARM_32BIT   /* handle */
    253251                    )
    254             {
    255                 rc = VERR_INVALID_PARAMETER;
    256             }
     252                rc = VERR_INVALID_PARAMETER;
    257253            else
    258254            {
    259255                uint32_t u32Flags;
    260                 void *pvName;
     256                const char *pszName;
    261257                uint32_t cbName;
    262258
    263                 rc = VBoxHGCMParmPtrGet(&paParms[0], &pvName, &cbName);
    264 
     259                rc = VBoxHGCMParmPtrGet(&paParms[0], (void **)&pszName, &cbName);
     260                if (   RT_SUCCESS(rc)
     261                    && pszName[cbName - 1] != '\0')
     262                    rc = VERR_INVALID_PARAMETER;
     263                if (RT_SUCCESS(rc))
     264                    rc = VBoxHGCMParmUInt32Get(&paParms[1], &u32Flags);
    265265                if (RT_SUCCESS(rc))
    266266                {
    267                     rc = VBoxHGCMParmUInt32Get(&paParms[1], &u32Flags);
    268 
     267                    uint32_t u32Handle = 0;
     268                    rc = vboxHostChannelAttach(pClient, &u32Handle, pszName, u32Flags);
    269269                    if (RT_SUCCESS(rc))
    270                     {
    271                         uint32_t u32Handle = 0;
    272 
    273                         /** @todo make sure that pvName is a nul terminated */
    274                         rc = vboxHostChannelAttach(pClient, &u32Handle, (const char *)pvName, u32Flags);
    275 
    276                         if (RT_SUCCESS(rc))
    277                         {
    278                             VBoxHGCMParmUInt32Set(&paParms[2], u32Handle);
    279                         }
    280                     }
     270                        VBoxHGCMParmUInt32Set(&paParms[2], u32Handle);
    281271                }
    282272            }
     
    516506            else
    517507            {
    518                 void *pvName;
     508                const char *pszName;
    519509                uint32_t cbName;
    520510                uint32_t u32Code;
     
    524514                uint32_t cbData;
    525515
    526                 rc = VBoxHGCMParmPtrGet(&paParms[0], &pvName, &cbName);
    527 
     516                rc = VBoxHGCMParmPtrGet(&paParms[0], (void **)&pszName, &cbName);
     517                if (   RT_SUCCESS(rc)
     518                    && pszName[cbName - 1] != '\0')
     519                    rc = VERR_INVALID_PARAMETER;
     520
     521                if (RT_SUCCESS(rc))
     522                    rc = VBoxHGCMParmUInt32Get(&paParms[1], &u32Code);
     523                if (RT_SUCCESS (rc))
     524                    rc = VBoxHGCMParmPtrGet(&paParms[2], &pvParm, &cbParm);
     525                if (RT_SUCCESS (rc))
     526                    rc = VBoxHGCMParmPtrGet(&paParms[3], &pvData, &cbData);
    528527                if (RT_SUCCESS (rc))
    529528                {
    530                     rc = VBoxHGCMParmUInt32Get (&paParms[1], &u32Code);
    531 
    532                     if (RT_SUCCESS (rc))
    533                     {
    534                         rc = VBoxHGCMParmPtrGet (&paParms[2], &pvParm, &cbParm);
    535 
    536                         if (RT_SUCCESS (rc))
    537                         {
    538                             rc = VBoxHGCMParmPtrGet (&paParms[3], &pvData, &cbData);
    539 
    540                             if (RT_SUCCESS (rc))
    541                             {
    542                                 uint32_t u32SizeDataReturned = 0;
    543 
    544                                 /** @todo make sure that pvName is a nul terminated */
    545                                 rc = vboxHostChannelQuery(pClient, (const char *)pvName, u32Code,
    546                                                           pvParm, cbParm,
    547                                                           pvData, cbData, &u32SizeDataReturned);
    548                                 if (RT_SUCCESS(rc))
    549                                 {
    550                                     VBoxHGCMParmUInt32Set(&paParms[4], u32SizeDataReturned);
    551                                 }
    552                             }
    553                         }
    554                     }
     529                    uint32_t u32SizeDataReturned = 0;
     530                    rc = vboxHostChannelQuery(pClient, pszName, u32Code,
     531                                              pvParm, cbParm,
     532                                              pvData, cbData, &u32SizeDataReturned);
     533                    if (RT_SUCCESS(rc))
     534                        VBoxHGCMParmUInt32Set(&paParms[4], u32SizeDataReturned);
    555535                }
    556536            }
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette