diff options
author | Michael Meskes <meskes@debian.org> | 2011-11-15 12:34:57 +0100 |
---|---|---|
committer | Michael Meskes <meskes@debian.org> | 2011-11-15 12:34:57 +0100 |
commit | 9822fe88ca8cc3ef4c3c35e28e6b795f4fc96a53 (patch) | |
tree | 05f00fc29a0037b188d0767b1ef828ee557f7bca /src/VBox/Main/src-all/ExtPackUtil.cpp | |
parent | 1cf00a61132b69bc7e27254fdd74bf105d2da28c (diff) | |
download | virtualbox-9822fe88ca8cc3ef4c3c35e28e6b795f4fc96a53.tar.gz |
Imported Upstream version 4.1.6-dfsgupstream/4.1.6-dfsg
Diffstat (limited to 'src/VBox/Main/src-all/ExtPackUtil.cpp')
-rw-r--r-- | src/VBox/Main/src-all/ExtPackUtil.cpp | 40 |
1 files changed, 32 insertions, 8 deletions
diff --git a/src/VBox/Main/src-all/ExtPackUtil.cpp b/src/VBox/Main/src-all/ExtPackUtil.cpp index 86728a2fd..bcdc91aec 100644 --- a/src/VBox/Main/src-all/ExtPackUtil.cpp +++ b/src/VBox/Main/src-all/ExtPackUtil.cpp @@ -4,7 +4,7 @@ */ /* - * Copyright (C) 2010 Oracle Corporation + * Copyright (C) 2010-2011 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -69,6 +69,7 @@ static void vboxExtPackClearDesc(PVBOXEXTPACKDESC a_pExtPackDesc) a_pExtPackDesc->strName.setNull(); a_pExtPackDesc->strDescription.setNull(); a_pExtPackDesc->strVersion.setNull(); + a_pExtPackDesc->strEdition.setNull(); a_pExtPackDesc->uRevision = 0; a_pExtPackDesc->strMainModule.setNull(); a_pExtPackDesc->strVrdeModule.setNull(); @@ -145,6 +146,12 @@ static RTCString *vboxExtPackLoadDescFromDoc(xml::Document *a_pDoc, PVBOXEXTPACK if (!pVersionElm->getAttributeValue("revision", uRevision)) uRevision = 0; + const char *pszEdition; + if (!pVersionElm->getAttributeValue("edition", pszEdition)) + pszEdition = ""; + if (!VBoxExtPackIsValidEditionString(pszEdition)) + return &(new RTCString("Invalid edition string: "))->append(pszEdition); + const xml::ElementNode *pMainModuleElm = pVBoxExtPackElm->findChildElement("MainModule"); if (!pMainModuleElm) return new RTCString("The 'MainModule' element is missing"); @@ -193,6 +200,7 @@ static RTCString *vboxExtPackLoadDescFromDoc(xml::Document *a_pDoc, PVBOXEXTPACK a_pExtPackDesc->strName = pszName; a_pExtPackDesc->strDescription = pszDesc; a_pExtPackDesc->strVersion = pszVersion; + a_pExtPackDesc->strEdition = pszEdition; a_pExtPackDesc->uRevision = uRevision; a_pExtPackDesc->strMainModule = pszMainModule; a_pExtPackDesc->strVrdeModule = pszVrdeModule; @@ -349,6 +357,7 @@ void VBoxExtPackFreeDesc(PVBOXEXTPACKDESC a_pExtPackDesc) a_pExtPackDesc->strName.setNull(); a_pExtPackDesc->strDescription.setNull(); a_pExtPackDesc->strVersion.setNull(); + a_pExtPackDesc->strEdition.setNull(); a_pExtPackDesc->uRevision = 0; a_pExtPackDesc->strMainModule.setNull(); a_pExtPackDesc->strVrdeModule.setNull(); @@ -572,6 +581,8 @@ bool VBoxExtPackIsValidVersionString(const char *pszVersion) /* upper case string + numbers indicating the build type */ if (*pszVersion == '-' || *pszVersion == '_') { + /** @todo Should probably restrict this to known build types (alpha, + * beta, rc, ++). */ do pszVersion++; while ( RT_C_IS_DIGIT(*pszVersion) @@ -580,17 +591,30 @@ bool VBoxExtPackIsValidVersionString(const char *pszVersion) || *pszVersion == '_'); } - /* revision or nothing */ - if (*pszVersion != '\0') + return *pszVersion == '\0'; +} + +/** + * Validates the extension pack edition string. + * + * @returns true if valid, false if not. + * @param pszEdition The edition string to validate. + */ +bool VBoxExtPackIsValidEditionString(const char *pszEdition) +{ + if (*pszEdition) { - if (*pszVersion != 'r') + if (!RT_C_IS_UPPER(*pszEdition)) return false; + do - pszVersion++; - while (RT_C_IS_DIGIT(*pszVersion)); + pszEdition++; + while ( RT_C_IS_UPPER(*pszEdition) + || RT_C_IS_DIGIT(*pszEdition) + || *pszEdition == '-' + || *pszEdition == '_'); } - - return *pszVersion == '\0'; + return *pszEdition == '\0'; } /** |