VirtualBox

Changeset 79677 in vbox for trunk/src/VBox/Main/xml


Ignore:
Timestamp:
Jul 10, 2019 3:45:05 PM (6 years ago)
Author:
vboxsync
Message:

Runtime/r3/xml.cpp: Introduce methods which limit the size of element and attribute values when querying them. Just for sanitizing, not that the buffer size is actually limited.
Main/Appliance+ExtPack: Use size checks to play safe with XML sata.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/xml/ovfreader.cpp

    r78604 r79677  
    107107    if ((pTypeAttr = pRootElem->findAttribute("lang", "xml")))
    108108    {
    109         pcszTypeAttr = pTypeAttr->getValue();
     109        pcszTypeAttr = pTypeAttr->getValueN(RT_XML_ATTR_TINY);
    110110        m_envelopeData.lang = pcszTypeAttr;
    111111    }
     
    148148        const char *pcszElemName = pElem->getName();
    149149        const xml::AttributeNode *pTypeAttr = pElem->findAttribute("type");
    150         const char *pcszTypeAttr = pTypeAttr ? pTypeAttr->getValue() : "";
     150        const char *pcszTypeAttr = pTypeAttr ? pTypeAttr->getValueN(RT_XML_ATTR_TINY) : "";
    151151
    152152        if (    !strcmp(pcszElemName, "DiskSection")
     
    226226        const char *pcszDiskId;
    227227        const char *pcszFormat;
    228         if (!pelmDisk->getAttributeValue("diskId", pcszDiskId))
     228        if (!pelmDisk->getAttributeValueN("diskId", pcszDiskId, RT_XML_ATTR_TINY))
    229229            pcszBad = "diskId";
    230         else if (!pelmDisk->getAttributeValue("format", pcszFormat))
     230        else if (!pelmDisk->getAttributeValueN("format", pcszFormat, RT_XML_ATTR_SMALL))
    231231            pcszBad = "format";
    232232        else if (!pelmDisk->getAttributeValue("capacity", d.iCapacity))
     
    242242
    243243            // optional vbox:uuid attribute (if OVF was exported by VirtualBox != 3.2)
    244             pelmDisk->getAttributeValue("uuid", d.uuidVBox, "vbox");
     244            pelmDisk->getAttributeValueN("uuid", d.uuidVBox, RT_XML_ATTR_TINY, "vbox");
    245245
    246246            const char *pcszFileRef;
    247             if (pelmDisk->getAttributeValue("fileRef", pcszFileRef)) // optional
     247            if (pelmDisk->getAttributeValueN("fileRef", pcszFileRef, RT_XML_ATTR_SMALL)) // optional
    248248            {
    249249                // look up corresponding /References/File nodes (list built above)
     
    257257                    const char *pcszBadInFile = NULL;
    258258                    const char *pcszHref;
    259                     if (!pFileElem->getAttributeValue("href", pcszHref))
     259                    if (!pFileElem->getAttributeValueN("href", pcszHref, RT_XML_ATTR_SMALL))
    260260                        pcszBadInFile = "href";
    261261                    else if (!pFileElem->getAttributeValue("size", d.iSize))
     
    267267                    d.iChunkSize = -1;       // optional
    268268                    const char *pcszCompression;
    269                     if (pFileElem->getAttributeValue("compression", pcszCompression))
     269                    if (pFileElem->getAttributeValueN("compression", pcszCompression, RT_XML_ATTR_TINY))
    270270                        d.strCompression = pcszCompression;
    271271
     
    350350    const xml::AttributeNode *pIdAttr = pelmVirtualSystem->findAttribute("id");
    351351    if (pIdAttr)
    352         vsys.strName = pIdAttr->getValue();
     352        vsys.strName = pIdAttr->getValueN(RT_XML_ATTR_SMALL);
    353353
    354354    xml::NodesLoop loop(*pelmVirtualSystem);      // all child elements
     
    362362            const xml::AttributeNode *pTypeAttr = pelmThis->findAttribute("type");
    363363            if (pTypeAttr)
    364                 pcszTypeAttr = pTypeAttr->getValue();
     364                pcszTypeAttr = pTypeAttr->getValueN(RT_XML_ATTR_TINY);
    365365            else
    366366                throw OVFLogicError(N_("Error reading \"%s\": element \"Section\" has no \"type\" attribute, line %d"),
     
    380380            const xml::ElementNode *pelmLicense;
    381381            if ((pelmLicense = pelmThis->findChildElement("License")))
    382                 vsys.strLicenseText = pelmLicense->getValue();
     382                vsys.strLicenseText = pelmLicense->getValueN(RT_XML_CONTENT_LARGE);
    383383        }
    384384        if (    !strcmp(pcszElemName, "ProductSection")
     
    396396            const xml::ElementNode *pelmProduct;
    397397            if ((pelmProduct = pelmThis->findChildElement("Product")))
    398                 vsys.strProduct = pelmProduct->getValue();
     398                vsys.strProduct = pelmProduct->getValueN(RT_XML_CONTENT_SMALL);
    399399            const xml::ElementNode *pelmVendor;
    400400            if ((pelmVendor = pelmThis->findChildElement("Vendor")))
    401                 vsys.strVendor = pelmVendor->getValue();
     401                vsys.strVendor = pelmVendor->getValueN(RT_XML_CONTENT_SMALL);
    402402            const xml::ElementNode *pelmVersion;
    403403            if ((pelmVersion = pelmThis->findChildElement("Version")))
    404                 vsys.strVersion = pelmVersion->getValue();
     404                vsys.strVersion = pelmVersion->getValueN(RT_XML_CONTENT_SMALL);
    405405            const xml::ElementNode *pelmProductUrl;
    406406            if ((pelmProductUrl = pelmThis->findChildElement("ProductUrl")))
    407                 vsys.strProductUrl = pelmProductUrl->getValue();
     407                vsys.strProductUrl = pelmProductUrl->getValueN(RT_XML_CONTENT_SMALL);
    408408            const xml::ElementNode *pelmVendorUrl;
    409409            if ((pelmVendorUrl = pelmThis->findChildElement("VendorUrl")))
    410                 vsys.strVendorUrl = pelmVendorUrl->getValue();
     410                vsys.strVendorUrl = pelmVendorUrl->getValueN(RT_XML_CONTENT_SMALL);
    411411        }
    412412        else if (    !strcmp(pcszElemName, "VirtualHardwareSection")
     
    425425                </System>*/
    426426                if ((pelmVirtualSystemType = pelmSystem->findChildElement("VirtualSystemType")))
    427                     vsys.strVirtualSystemType = pelmVirtualSystemType->getValue();
     427                    vsys.strVirtualSystemType = pelmVirtualSystemType->getValueN(RT_XML_CONTENT_SMALL);
    428428            }
    429429
     
    792792            const xml::ElementNode *pelmCIMOSDescription;
    793793            if ((pelmCIMOSDescription = pelmThis->findChildElement("Description")))
    794                 vsys.strCimosDesc = pelmCIMOSDescription->getValue();
     794                vsys.strCimosDesc = pelmCIMOSDescription->getValueN(RT_XML_CONTENT_SMALL);
    795795
    796796            const xml::ElementNode *pelmVBoxOSType;
    797797            if ((pelmVBoxOSType = pelmThis->findChildElementNS("vbox",            // namespace
    798798                                                               "OSType")))        // element name
    799                 vsys.strTypeVBox = pelmVBoxOSType->getValue();
     799                vsys.strTypeVBox = pelmVBoxOSType->getValueN(RT_XML_CONTENT_SMALL);
    800800        }
    801801        else if (    (!strcmp(pcszElemName, "AnnotationSection"))
     
    805805            const xml::ElementNode *pelmAnnotation;
    806806            if ((pelmAnnotation = pelmThis->findChildElement("Annotation")))
    807                 vsys.strDescription = pelmAnnotation->getValue();
     807                vsys.strDescription = pelmAnnotation->getValueN(RT_XML_CONTENT_SMALL);
    808808        }
    809809    }
     
    818818        const char *pcszItemChildName = pelmItemChild->getName();
    819819        if (!strcmp(pcszItemChildName, "Description"))
    820             strDescription = pelmItemChild->getValue();
     820            strDescription = pelmItemChild->getValueN(RT_XML_CONTENT_SMALL);
    821821        else if (!strcmp(pcszItemChildName, "Caption"))
    822             strCaption = pelmItemChild->getValue();
     822            strCaption = pelmItemChild->getValueN(RT_XML_CONTENT_SMALL);
    823823        else if (!strcmp(pcszItemChildName, "ElementName"))
    824             strElementName = pelmItemChild->getValue();
     824            strElementName = pelmItemChild->getValueN(RT_XML_CONTENT_SMALL);
    825825        else if (   !strcmp(pcszItemChildName, "InstanceID")
    826826                 || !strcmp(pcszItemChildName, "InstanceId") )
    827827            pelmItemChild->copyValue(ulInstanceID);
    828828        else if (!strcmp(pcszItemChildName, "HostResource"))
    829             strHostResource = pelmItemChild->getValue();
     829            strHostResource = pelmItemChild->getValueN(RT_XML_CONTENT_SMALL);
    830830        else if (!strcmp(pcszItemChildName, "ResourceType"))
    831831        {
     
    835835            fResourceRequired = true;
    836836            const char *pcszAttValue;
    837             if (item->getAttributeValue("required", pcszAttValue))
     837            if (item->getAttributeValueN("required", pcszAttValue, RT_XML_ATTR_TINY))
    838838            {
    839839                if (!strcmp(pcszAttValue, "false"))
     
    842842        }
    843843        else if (!strcmp(pcszItemChildName, "OtherResourceType"))
    844             strOtherResourceType = pelmItemChild->getValue();
     844            strOtherResourceType = pelmItemChild->getValueN(RT_XML_CONTENT_SMALL);
    845845        else if (!strcmp(pcszItemChildName, "ResourceSubType"))
    846             strResourceSubType = pelmItemChild->getValue();
     846            strResourceSubType = pelmItemChild->getValueN(RT_XML_CONTENT_SMALL);
    847847        else if (!strcmp(pcszItemChildName, "AutomaticAllocation"))
    848             fAutomaticAllocation = (!strcmp(pelmItemChild->getValue(), "true")) ? true : false;
     848            fAutomaticAllocation = (!strcmp(pelmItemChild->getValueN(RT_XML_CONTENT_SMALL), "true")) ? true : false;
    849849        else if (!strcmp(pcszItemChildName, "AutomaticDeallocation"))
    850             fAutomaticDeallocation = (!strcmp(pelmItemChild->getValue(), "true")) ? true : false;
     850            fAutomaticDeallocation = (!strcmp(pelmItemChild->getValueN(RT_XML_CONTENT_SMALL), "true")) ? true : false;
    851851        else if (!strcmp(pcszItemChildName, "Parent"))
    852852            pelmItemChild->copyValue(ulParent);
    853853        else if (!strcmp(pcszItemChildName, "Connection"))
    854             strConnection = pelmItemChild->getValue();
     854            strConnection = pelmItemChild->getValueN(RT_XML_CONTENT_SMALL);
    855855        else if (!strcmp(pcszItemChildName, "Address"))
    856856        {
    857             strAddress = pelmItemChild->getValue();
     857            strAddress = pelmItemChild->getValueN(RT_XML_CONTENT_SMALL);
    858858            pelmItemChild->copyValue(lAddress);
    859859        }
    860860        else if (!strcmp(pcszItemChildName, "AddressOnParent"))
    861             strAddressOnParent = pelmItemChild->getValue();
     861            strAddressOnParent = pelmItemChild->getValueN(RT_XML_CONTENT_SMALL);
    862862        else if (!strcmp(pcszItemChildName, "AllocationUnits"))
    863             strAllocationUnits = pelmItemChild->getValue();
     863            strAllocationUnits = pelmItemChild->getValueN(RT_XML_CONTENT_SMALL);
    864864        else if (!strcmp(pcszItemChildName, "VirtualQuantity"))
    865865            pelmItemChild->copyValue(ullVirtualQuantity);
     
    871871            pelmItemChild->copyValue(ullWeight);
    872872        else if (!strcmp(pcszItemChildName, "ConsumerVisibility"))
    873             strConsumerVisibility = pelmItemChild->getValue();
     873            strConsumerVisibility = pelmItemChild->getValueN(RT_XML_CONTENT_SMALL);
    874874        else if (!strcmp(pcszItemChildName, "MappingBehavior"))
    875             strMappingBehavior = pelmItemChild->getValue();
     875            strMappingBehavior = pelmItemChild->getValueN(RT_XML_CONTENT_SMALL);
    876876        else if (!strcmp(pcszItemChildName, "PoolID"))
    877             strPoolID = pelmItemChild->getValue();
     877            strPoolID = pelmItemChild->getValueN(RT_XML_CONTENT_SMALL);
    878878        else if (!strcmp(pcszItemChildName, "BusNumber"))
    879879            pelmItemChild->copyValue(ulBusNumber);
     
    921921        const char *pcszItemChildName = pelmItemChild->getName();
    922922        if (!strcmp(pcszItemChildName, "HostExtentName"))
    923             strHostExtentName = pelmItemChild->getValue();
     923            strHostExtentName = pelmItemChild->getValueN(RT_XML_CONTENT_SMALL);
    924924        else if (!strcmp(pcszItemChildName, "OtherHostExtentNameFormat"))
    925             strOtherHostExtentNameFormat = pelmItemChild->getValue();
     925            strOtherHostExtentNameFormat = pelmItemChild->getValueN(RT_XML_CONTENT_SMALL);
    926926        else if (!strcmp(pcszItemChildName, "OtherHostExtentNameNamespace"))
    927             strOtherHostExtentNameNamespace = pelmItemChild->getValue();
     927            strOtherHostExtentNameNamespace = pelmItemChild->getValueN(RT_XML_CONTENT_SMALL);
    928928        else if (!strcmp(pcszItemChildName, "VirtualQuantityUnits"))
    929             strVirtualQuantityUnits = pelmItemChild->getValue();
     929            strVirtualQuantityUnits = pelmItemChild->getValueN(RT_XML_CONTENT_SMALL);
    930930        else if (!strcmp(pcszItemChildName, "Access"))
    931931        {
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