On 07/29/2011 04:05 AM, Wayne Xia wrote:
diff -r 640ea61807cf -r f170cdc0acb5
src/Virt_VirtualSystemManagementService.c
--- a/src/Virt_VirtualSystemManagementService.c Mon Jul 25 19:39:08 2011 +0800
+++ b/src/Virt_VirtualSystemManagementService.c Tue Jul 26 17:02:51 2011 +0800
@@ -1060,6 +1060,52 @@
return ret;
}
+static int parse_sdl_address(const char *id,
+ char **display,
+ char **xauth)
+{
+ int ret;
+ char *tmp_display = NULL;
+ char *tmp_xauth = NULL;
+
+ CU_DEBUG("Entering parse_sdl_address, address is %s", id);
+
+ ret = sscanf(id, "%a[^:]:%as",&tmp_xauth,&tmp_display);
+
+ if (ret<= 0) {
+ ret = sscanf(id, ":%as",&tmp_display);
+ if (ret<= 0) {
+ if (STREQC(id, ":")) {
+ /* do nothing, it is empty */
+ }
+ else {
+ ret = 0;
+ goto out;
+ }
+ }
+ }
+
+ if (display) {
+ if (tmp_display == NULL)
+ *display = NULL;
+ else
+ *display = strdup(tmp_display);
+ }
+ if (xauth) {
+ if (tmp_xauth == NULL)
+ *xauth = NULL;
+ else
+ *xauth = strdup(tmp_xauth);
+ }
+ ret = 1;
+
+ out:
This would leak tmp_display and tmp_xauth variables. According to
sscanf(3), the 'a' character implies the resulting buffer should be freed.
free(tmp_display);
free(tmp_xauth);
+ CU_DEBUG("Exiting parse_sdl_address, display is %s,
xauth is %s",
+ *display, *xauth);
+
+ return ret;
+}
ACK. Again, this could be fixed before push.
--
Eduardo de Barros Lima
Software Engineer, Open Virtualization
Linux Technology Center - IBM/Brazil
eblima(a)br.ibm.com