summaryrefslogtreecommitdiff
path: root/src/VBox/Additions/common/VBoxService/VBoxServiceUtils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/VBox/Additions/common/VBoxService/VBoxServiceUtils.cpp')
-rw-r--r--src/VBox/Additions/common/VBoxService/VBoxServiceUtils.cpp30
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;