
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@br.ibm.com