Skip to content

Instantly share code, notes, and snippets.

@iammattcoleman
Last active September 29, 2020 00:22
Show Gist options
  • Save iammattcoleman/6b4fb921698bc77026a2ab4dd568e9bb to your computer and use it in GitHub Desktop.
Save iammattcoleman/6b4fb921698bc77026a2ab4dd568e9bb to your computer and use it in GitHub Desktop.
virBuffer/char* memory leaks?
for (i = 0; i < maxinfo; i++) {
...
/* Attribute Name format : <domain_name>:Hv VP <vCPU_number> */
// TODO: this needs SQL injection protection
virBufferAsprintf(&query,
WIN32_PERFRAWDATA_HVSTATS_HYPERVHYPERVISORVIRTUALPROCESSOR_WQL_SELECT
"WHERE Name = \"%s:Hv VP %d\"",
domain->name, i);
...
}
g_auto(virBuffer) query_name = VIR_BUFFER_INITIALIZER;
...
for (i = 0; i < maxinfo; i++) {
...
/* Attribute Name format : <domain_name>:Hv VP <vCPU_number> */
virBufferAsprintf(&query_name, "%s:Hv VP %d", domain->name, i);
virBufferEscapeSQL(&query,
WIN32_PERFRAWDATA_HVSTATS_HYPERVHYPERVISORVIRTUALPROCESSOR_WQL_SELECT
"WHERE Name = \"%s\"",
virBufferContentAndReset(&query_name));
...
}
g_auto(virBuffer) query_name_buffer = VIR_BUFFER_INITIALIZER;
char *query_name = NULL;
...
for (i = 0; i < maxinfo; i++) {
...
/* Attribute Name format : <domain_name>:Hv VP <vCPU_number> */
virBufferAsprintf(&query_name_buffer, "%s:Hv VP %d", domain->name, i);
query_name = virBufferContentAndReset(&query_name_buffer);
virBufferEscapeSQL(&query,
WIN32_PERFRAWDATA_HVSTATS_HYPERVHYPERVISORVIRTUALPROCESSOR_WQL_SELECT
"WHERE Name = \"%s\"",
query_name);
VIR_FREE(query_name);
...
}
g_auto(virBuffer) query_name_buffer = VIR_BUFFER_INITIALIZER;
char *query_name = NULL;
...
for (i = 0; i < maxinfo; i++) {
...
/* Attribute Name format : <domain_name>:Hv VP <vCPU_number> */
virBufferAsprintf(&query_name_buffer, "%s:Hv VP %d", domain->name, i);
if (!(query_name = virBufferContentAndReset(&query_name_buffer))) {
virReportError(VIR_ERR_INTERNAL_ERROR, _("Could not format Name for vCPU #%d"), i);
continue;
}
virBufferEscapeSQL(&query,
WIN32_PERFRAWDATA_HVSTATS_HYPERVHYPERVISORVIRTUALPROCESSOR_WQL_SELECT
"WHERE Name = \"%s\"",
query_name);
VIR_FREE(query_name);
...
}
for (i = 0; i < maxinfo; i++) {
g_auto(virBuffer) query = VIR_BUFFER_INITIALIZER;
g_auto(virBuffer) query_name_buffer = VIR_BUFFER_INITIALIZER;
g_autofree char *query_name = NULL;
...
/* Attribute Name format : <domain_name>:Hv VP <vCPU_number> */
virBufferAsprintf(&query_name_buffer, "%s:Hv VP %d", domain->name, i);
query_name = g_strdup(virBufferCurrentContent(&query_name_buffer));
virBufferEscapeSQL(&query,
WIN32_PERFRAWDATA_HVSTATS_HYPERVHYPERVISORVIRTUALPROCESSOR_WQL_SELECT
"WHERE Name = \"%s\"",
query_name);
...
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment