[libvirt] [PATCH 4/5] phyp: Fix too small buffer allocation in phypAttachDevice
Matthias Bolte
matthias.bolte at googlemail.com
Thu Apr 14 12:00:09 UTC 2011
2011/4/11 Daniel Veillard <veillard at redhat.com>:
> On Sat, Apr 09, 2011 at 11:59:10AM +0200, Matthias Bolte wrote:
>> sizeof(domain->name) is the wrong thing. Instead of using strdup here
>> rewrite escape_specialcharacters to allocate the buffer itself.
>>
>> Add a contains_specialcharacters to be used in phypOpen, as phypOpen is
>> not interested in the escaped version.
>> ---
>> src/phyp/phyp_driver.c | 90 ++++++++++++++++++++++++++++++++---------------
>> 1 files changed, 61 insertions(+), 29 deletions(-)
>>
>
> ACK, we just need to make sure contains_specialcharacters() and
> escape_specialcharacters() don't diverge on the charater set. Maybe
> add a comment in escape_specialcharacters() to this effect.
>
> Daniel
>
I just moved the character set to a define, like this and pushed the result.
diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c
index 2eb8317..3862c9c 100644
--- a/src/phyp/phyp_driver.c
+++ b/src/phyp/phyp_driver.c
@@ -894,6 +894,12 @@ phypUUIDTable_Free(uuid_tablePtr uuid_table)
VIR_FREE(uuid_table);
}
+#define SPECIALCHARACTER_CASES \
+ case '&': case ';': case '`': case '@': case '"': case '|': case '*': \
+ case '?': case '~': case '<': case '>': case '^': case '(': case ')': \
+ case '[': case ']': case '{': case '}': case '$': case '%': case '#': \
+ case '\\': case '\n': case '\r': case '\t':
+
static bool
contains_specialcharacters(const char *src)
{
@@ -905,32 +911,10 @@ contains_specialcharacters(const char *src)
for (i = 0; i < len; i++) {
switch (src[i]) {
- case '&':
- case ';':
- case '`':
- case '@':
- case '"':
- case '|':
- case '*':
- case '?':
- case '~':
- case '<':
- case '>':
- case '^':
- case '(':
- case ')':
- case '[':
- case ']':
- case '{':
- case '}':
- case '$':
- case '%':
- case '#':
- case '\\':
- case '\n':
- case '\r':
- case '\t':
- return true;
+ SPECIALCHARACTER_CASES
+ return true;
+ default:
+ continue;
}
}
@@ -954,35 +938,11 @@ escape_specialcharacters(const char *src)
for (i = 0; i < len; i++) {
switch (src[i]) {
- case '&':
- case ';':
- case '`':
- case '@':
- case '"':
- case '|':
- case '*':
- case '?':
- case '~':
- case '<':
- case '>':
- case '^':
- case '(':
- case ')':
- case '[':
- case ']':
- case '{':
- case '}':
- case '$':
- case '%':
- case '#':
- case '\\':
- case '\n':
- case '\r':
- case '\t':
- continue;
- default:
- dst[j] = src[i];
- j++;
+ SPECIALCHARACTER_CASES
+ continue;
+ default:
+ dst[j] = src[i];
+ j++;
}
}
More information about the libvir-list
mailing list