[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-trivial] [PULL 28/46] util/uri: URI member path can be null, compa
From: |
Michael Tokarev |
Subject: |
[Qemu-trivial] [PULL 28/46] util/uri: URI member path can be null, compare more carfully |
Date: |
Tue, 10 Feb 2015 09:34:17 +0300 |
From: Markus Armbruster <address@hidden>
uri_resolve_relative() calls strcmp(bas->path, ref->path). However,
either argument could be null! Evidence: the code checks for null
after the comparison. Spotted by Coverity.
I suspect this was screwed up when we stole the code from libxml2.
There the conditional reads
xmlStrEqual((xmlChar *)bas->path, (xmlChar *)ref->path)
with
int
xmlStrEqual(const xmlChar *str1, const xmlChar *str2) {
if (str1 == str2) return(1);
if (str1 == NULL) return(0);
if (str2 == NULL) return(0);
do {
if (*str1++ != *str2) return(0);
} while (*str2++);
return(1);
}
Fix by replicating libxml2's logic faithfully.
Cc: Paolo Bonzini <address@hidden>
Signed-off-by: Markus Armbruster <address@hidden>
Signed-off-by: Michael Tokarev <address@hidden>
---
util/uri.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/util/uri.c b/util/uri.c
index b9a7b54..1cfd78b 100644
--- a/util/uri.c
+++ b/util/uri.c
@@ -1935,7 +1935,8 @@ uri_resolve_relative (const char *uri, const char * base)
val = g_strdup (uri);
goto done;
}
- if (!strcmp(bas->path, ref->path)) {
+ if (bas->path == ref->path ||
+ (bas->path && ref->path && !strcmp(bas->path, ref->path))) {
val = g_strdup("");
goto done;
}
--
2.1.4
- [Qemu-trivial] [PULL 09/46] linux-user/syscall.c: lock_iovec: unlock vec[i] in failure processing code block, (continued)
- [Qemu-trivial] [PULL 09/46] linux-user/syscall.c: lock_iovec: unlock vec[i] in failure processing code block, Michael Tokarev, 2015/02/10
- [Qemu-trivial] [PULL 17/46] aes: remove a dead return statement, Michael Tokarev, 2015/02/10
- Re: [Qemu-trivial] [Qemu-devel] [PULL 00/46] Trivial patches for 2015-02-10, Peter Maydell, 2015/02/10
- [Qemu-trivial] [PULL 24/46] spapr_vio: Pair g_malloc() with g_free(), not free(), Michael Tokarev, 2015/02/10
- [Qemu-trivial] [PULL 03/46] Add tracing to xenfb., Michael Tokarev, 2015/02/10
- [Qemu-trivial] [PULL 32/46] rtl8139: g_malloc() can't fail, bury dead error handling, Michael Tokarev, 2015/02/10
- [Qemu-trivial] [PULL 19/46] qemu-sockets: Fix buffer overflow in inet_parse(), Michael Tokarev, 2015/02/10
- [Qemu-trivial] [PULL 30/46] Fix name error in migration stream analyzation script, Michael Tokarev, 2015/02/10
- [Qemu-trivial] [PULL 28/46] util/uri: URI member path can be null, compare more carfully,
Michael Tokarev <=
- [Qemu-trivial] [PULL 13/46] qemu-log: Correct help text of 'log cpu_reset', Michael Tokarev, 2015/02/10
- [Qemu-trivial] [PULL 39/46] migration: Fix warning caused by missing declaration of vmstate_dummy, Michael Tokarev, 2015/02/10
- [Qemu-trivial] [PULL 31/46] onenand: g_malloc() can't fail, bury dead error handling, Michael Tokarev, 2015/02/10
- [Qemu-trivial] [PULL 27/46] util/uri: realloc2n() can't fail, drop dead error handling, Michael Tokarev, 2015/02/10
- [Qemu-trivial] [PULL 21/46] libcacard: stop linking against every single 3rd party library, Michael Tokarev, 2015/02/10
- [Qemu-trivial] [PULL 14/46] cpu-exec: drop dead assignment, Michael Tokarev, 2015/02/10
- [Qemu-trivial] [PULL 40/46] migration: Fix warnings caused by missing 'static' attribute, Michael Tokarev, 2015/02/10
- [Qemu-trivial] [PULL 46/46] virtio: Fix warning caused by missing 'static' attribute, Michael Tokarev, 2015/02/10