VirtualBox

Changeset 50416 in vbox


Ignore:
Timestamp:
Feb 11, 2014 6:00:45 PM (11 years ago)
Author:
vboxsync
Message:

Main: fix the remaining NULL safearray issues, the template had useless assertions and the helper code used by the wrappers also needed to check for it everywhere

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/com/array.h

    r49765 r50416  
    44
    55/*
    6  * Copyright (C) 2006-2013 Oracle Corporation
     6 * Copyright (C) 2006-2014 Oracle Corporation
    77 *
    88 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    642642    SafeArray(ComSafeArrayIn(T, aArg))
    643643    {
    644 #ifdef VBOX_WITH_XPCOM
    645 
    646         AssertReturnVoid(aArg != NULL);
    647 
    648         m.size = aArgSize;
    649         m.arr = aArg;
    650         m.isWeak = true;
     644        if (aArg)
     645        {
     646#ifdef VBOX_WITH_XPCOM
     647
     648            m.size = aArgSize;
     649            m.arr = aArg;
     650            m.isWeak = true;
    651651
    652652#else /* !VBOX_WITH_XPCOM */
    653653
    654         AssertReturnVoid(aArg != NULL);
    655         SAFEARRAY *arg = aArg;
    656 
    657         if (arg)
    658         {
     654            SAFEARRAY *arg = aArg;
     655
    659656            AssertReturnVoid(arg->cDims == 1);
    660657
     
    676673            rc = SafeArrayAccessData(arg, (void HUGEP **)&m.raw);
    677674            AssertComRCReturnVoid(rc);
    678         }
    679 
    680         m.arr = arg;
    681         m.isWeak = true;
     675
     676            m.arr = arg;
     677            m.isWeak = true;
    682678
    683679#endif /* !VBOX_WITH_XPCOM */
     680        }
    684681    }
    685682
     
    10171014    virtual SafeArray &detachTo(ComSafeArrayOut(T, aArg))
    10181015    {
    1019         AssertReturn(m.isWeak == false, *this);
     1016        AssertReturn(!m.isWeak, *this);
    10201017
    10211018#ifdef VBOX_WITH_XPCOM
     
    15931590    SafeIfaceArray(ComSafeArrayIn(I *, aArg))
    15941591    {
    1595 #ifdef VBOX_WITH_XPCOM
    1596 
    1597         AssertReturnVoid(aArg != NULL);
    1598 
    1599         Base::m.size = aArgSize;
    1600         Base::m.arr = aArg;
    1601         Base::m.isWeak = true;
     1592        if (aArg)
     1593        {
     1594#ifdef VBOX_WITH_XPCOM
     1595
     1596            Base::m.size = aArgSize;
     1597            Base::m.arr = aArg;
     1598            Base::m.isWeak = true;
    16021599
    16031600#else /* !VBOX_WITH_XPCOM */
    16041601
    1605         AssertReturnVoid(aArg != NULL);
    1606         SAFEARRAY *arg = aArg;
    1607 
    1608         if (arg)
    1609         {
     1602            SAFEARRAY *arg = aArg;
     1603
    16101604            AssertReturnVoid(arg->cDims == 1);
    16111605
     
    16251619            rc = SafeArrayAccessData(arg, (void HUGEP **)&m.raw);
    16261620            AssertComRCReturnVoid(rc);
    1627         }
    1628 
    1629         m.arr = arg;
    1630         m.isWeak = true;
     1621
     1622            m.arr = arg;
     1623            m.isWeak = true;
    16311624
    16321625#endif /* !VBOX_WITH_XPCOM */
     1626        }
    16331627    }
    16341628
  • trunk/src/VBox/Main/include/Wrapper.h

    r50152 r50416  
    149149    ArrayBSTRInConverter(ComSafeArrayIn(IN_BSTR, aSrc))
    150150    {
    151         /** @todo How to handle ComSafeArrayInIsNull(aSrc)?  Is it appropriate to
    152          *        assert everywhere like we currently do?  It wasn't for the
    153          *        ArrayInConverter class (IAppliance::importMachines)... */
    154         com::SafeArray<IN_BSTR> inArray(ComSafeArrayInArg(aSrc));
    155         mArray.resize(inArray.size());
    156         for (size_t i = 0; i < inArray.size(); i++)
    157             mArray[i] = inArray[i];
     151        if (!ComSafeArrayInIsNull(aSrc))
     152        {
     153            com::SafeArray<IN_BSTR> inArray(ComSafeArrayInArg(aSrc));
     154            mArray.resize(inArray.size());
     155            for (size_t i = 0; i < inArray.size(); i++)
     156                mArray[i] = inArray[i];
     157        }
    158158    }
    159159
     
    382382    ArrayComTypeInConverter(ComSafeArrayIn(A *, aSrc))
    383383    {
    384         /** @todo How to handle ComSafeArrayInIsNull(aSrc)?  Is it appropriate to
    385          *        assert everywhere like we currently do?  It wasn't for the
    386          *        ArrayInConverter class (IAppliance::importMachines)... */
    387         com::SafeIfaceArray<A> inArray(ComSafeArrayInArg(aSrc));
    388         mArray.resize(inArray.size());
    389         for (size_t i = 0; i < inArray.size(); i++)
    390             mArray[i] = inArray[i];
     384        if (!ComSafeArrayInIsNull(aSrc))
     385        {
     386            com::SafeIfaceArray<A> inArray(ComSafeArrayInArg(aSrc));
     387            mArray.resize(inArray.size());
     388            for (size_t i = 0; i < inArray.size(); i++)
     389                mArray[i] = inArray[i];
     390        }
    391391    }
    392392
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