From a430f22be479fe3e0e750b83b1e3aade507278a9 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Mon, 21 Jan 2008 14:09:51 +0000 Subject: [PATCH] Don't access line[-1] for a zero-length "line" from fgets. A NUL byte at beginning of input, or just after a newline would provoke an invalid buf[-1] access (possible segfault). * src/libvirt.c (virConnectAuthCallbackDefault): --- ChangeLog | 28 ++++++++++++++++++++++++++-- src/libvirt.c | 6 ++++-- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index c97be1cbca..4d7d74bdc8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,13 @@ +Mon Jan 21 15:03:04 CET 2008 Jim Meyering + + Don't access line[-1] for a zero-length "line" from fgets. + A NUL byte at beginning of input, or just after a newline + would provoke an invalid buf[-1] access (possible segfault). + * src/libvirt.c (virConnectAuthCallbackDefault): + Mon Jan 21 09:25:12 CET 2008 Daniel Veillard - * src/xml-internal.c: apply patch from Hiroyuki Kaguchi to + * src/xml-internal.c: apply patch from Hiroyuki Kaguchi to preserve the vif list order. Mon Jan 21 09:06:28 CET 2008 Daniel Veillard @@ -27,7 +34,24 @@ Sat Jan 19 13:32:22 EST 2008 Daniel P. Berrange src/xend_internal.c: Use generic VIR_DEBUG macro for logging. Enable debug when env var LIBVIRT_DEBUG=1 -Tue Jan 15 16:25:57 CET Jim Meyering +Thu Jan 17 23:12:42 CET 2008 Jim Meyering + + Handle PyTuple_New's malloc failure. + * python/libvir.c (libvirt_virDomainBlockStats): Handle a NULL + return from PyTuple_New. + (libvirt_virDomainInterfaceStats, libvirt_virGetLastError): Likewise. + (libvirt_virConnGetLastError): Likewise. + + Factor out some duplication. + * python/libvir.c (VIR_PY_NONE): New macro, to encapsulate + a common two-statement sequence. + Replace all such 2-stmt sequences. + + Avoid format string warnings. + * src/virsh.c: Add "%s" where needed. + * src/proxy_internal.c: Likewise. + +Tue Jan 15 16:25:57 CET 2008 Jim Meyering * docs/examples/examples.xml: Regenerate, now that *.c file names are sorted. diff --git a/src/libvirt.c b/src/libvirt.c index 3a5cb7ba50..d8730a7b22 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -70,6 +70,7 @@ static int virConnectAuthCallbackDefault(virConnectCredentialPtr cred, for (i = 0 ; i < ncred ; i++) { char buf[1024]; char *bufptr = buf; + size_t len; if (printf("%s:", cred[i].prompt) < 0) return -1; @@ -88,8 +89,9 @@ static int virConnectAuthCallbackDefault(virConnectCredentialPtr cred, } return -1; } - if (buf[strlen(buf)-1] == '\n') - buf[strlen(buf)-1] = '\0'; + len = strlen(buf); + if (len != 0 && buf[len-1] == '\n') + buf[len-1] = '\0'; break; case VIR_CRED_PASSPHRASE: -- GitLab