VirtualBox

Changeset 36743 in vbox


Ignore:
Timestamp:
Apr 20, 2011 9:56:27 AM (14 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
71274
Message:

HostServices/GuestCtrl: More checks for empty buffers, drop host message if client did not understand it a second time.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostServices/GuestControl/service.cpp

    r36529 r36743  
    360360                                       pBuf->pParms[i].u.pointer.size);
    361361                        }
     362                        else
     363                        {
     364                            /* Size is 0 -- make sure we don't have any pointer. */
     365                            pBuf->pParms[i].u.pointer.addr = NULL;
     366                        }
    362367                        break;
    363368
     
    413418    if (cParms != pBuf->uParmCount)
    414419    {
    415         LogFlowFunc(("Parameter count does not match (%u (buffer), %u (guest))\n",
     420        LogFlowFunc(("Parameter count does not match: %u (host) vs. %u (guest)\n",
    416421                     pBuf->uParmCount, cParms));
    417422        rc = VERR_INVALID_PARAMETER;
     
    436441                    if (paParms[i].u.pointer.size >= pBuf->pParms[i].u.pointer.size)
    437442                    {
    438                         memcpy(paParms[i].u.pointer.addr,
    439                                pBuf->pParms[i].u.pointer.addr,
    440                                pBuf->pParms[i].u.pointer.size);
     443                        /* Only copy buffer if there actually is something to copy. */
     444                        if (pBuf->pParms[i].u.pointer.size)
     445                        {
     446                            AssertPtr(pBuf->pParms[i].u.pointer.addr);
     447                            memcpy(paParms[i].u.pointer.addr,
     448                                   pBuf->pParms[i].u.pointer.addr,
     449                                   pBuf->pParms[i].u.pointer.size);
     450                        }
    441451                    }
    442452                    else
     
    644654             }
    645655         }
     656         else
     657         {
     658            /* Client did not understand the message or something else weird happened. Try again one
     659             * more time and drop it if it didn't get handled then. */
     660             if (++curCmd.mTries > 1)
     661             {
     662                 paramBufferFree(&curCmd.mParmBuf);
     663                 mHostCmds.pop_front();
     664             }
     665         }
    646666    }
    647667    return rc;
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