]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commit
buf: Fix possible infinite loop in EscapeString, VSnprintf
authorCole Robinson <crobinso@redhat.com>
Wed, 1 Sep 2010 17:51:35 +0000 (13:51 -0400)
committerCole Robinson <crobinso@redhat.com>
Fri, 10 Sep 2010 14:05:43 +0000 (10:05 -0400)
commit18af6f4e64e97095bc95df25fb4a092cbbd6474c
treeca26025a441447cff487464f828e52fb40d0fb75
parent8a70113a9949fd482151f2962dd760364525a996
buf: Fix possible infinite loop in EscapeString, VSnprintf

The current code will go into an infinite loop if the printf generated
string is >= 1000, AND exactly 1 character smaller than the amount of free
space in the buffer. When this happens, we are dropped into the loop body,
but nothing will actually change, because count == (buf->size - buf->use - 1),
and virBufferGrow returns unchanged if count < (buf->size - buf->use)

Fix this by removing the '- 1' bit from 'size'. The *nprintf functions handle
the NULL byte for us anyways, so we shouldn't need to manually accommodate
for it.

Here's a bug where we are actually hitting this issue:
https://bugzilla.redhat.com/show_bug.cgi?id=602772

v2: Eric's improvements: while -> if (), remove extra va_list variable,
    make sure we report buffer error if snprintf fails

v3: Add tests/virbuftest which reproduces the infinite loop before this
    patch, works correctly after
src/util/buf.c
tests/.gitignore
tests/Makefile.am
tests/virbuftest.c [new file with mode: 0644]