diff options
Diffstat (limited to 'src/VBox/Additions/common/VBoxService/VBoxServiceUtils.cpp')
| -rw-r--r-- | src/VBox/Additions/common/VBoxService/VBoxServiceUtils.cpp | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceUtils.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceUtils.cpp index b09ef3e82..8bc61846c 100644 --- a/src/VBox/Additions/common/VBoxService/VBoxServiceUtils.cpp +++ b/src/VBox/Additions/common/VBoxService/VBoxServiceUtils.cpp @@ -4,7 +4,7 @@ */ /* - * Copyright (C) 2009-2012 Oracle Corporation + * Copyright (C) 2009-2013 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -110,7 +110,8 @@ int VBoxServiceReadProp(uint32_t u32ClientId, const char *pszPropName, break; /* done */ } - RTMemFree(pvBuf); + if (pvBuf) + RTMemFree(pvBuf); return rc; } @@ -167,8 +168,11 @@ int VBoxServiceReadPropUInt32(uint32_t u32ClientId, const char *pszPropName, int VBoxServiceReadHostProp(uint32_t u32ClientId, const char *pszPropName, bool fReadOnly, char **ppszValue, char **ppszFlags, uint64_t *puTimestamp) { - char *pszFlags; - int rc = VBoxServiceReadProp(u32ClientId, pszPropName, ppszValue, &pszFlags, puTimestamp); + AssertPtrReturn(ppszValue, VERR_INVALID_PARAMETER); + + char *pszValue = NULL; + char *pszFlags = NULL; + int rc = VBoxServiceReadProp(u32ClientId, pszPropName, &pszValue, &pszFlags, puTimestamp); if (RT_SUCCESS(rc)) { /* Check security bits. */ @@ -180,10 +184,22 @@ int VBoxServiceReadHostProp(uint32_t u32ClientId, const char *pszPropName, bool rc = VERR_ACCESS_DENIED; } - if (ppszFlags) - *ppszFlags = pszFlags; + if (RT_SUCCESS(rc)) + { + *ppszValue = pszValue; + + if (ppszFlags) + *ppszFlags = pszFlags; + else if (pszFlags) + RTStrFree(pszFlags); + } else - RTStrFree(pszFlags); + { + if (pszValue) + RTStrFree(pszValue); + if (pszFlags) + RTStrFree(pszFlags); + } } return rc; |
