Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
api: fix a buffer overflow in x86emu_log()
There seems to be an assumption that vsnprintf() returns a number of characters that were written. That is actually not the case -- it returns number of characters that *would* have been written regardless of truncation to specified size. Therefore, on x86emu_log() that would cross the buffer end will move .log.ptr beyond the end of the buffer, and the subsequent .flush() will be called back with a size argument larger than the buffer. Moreover, given the .flush() is essentially only invoked upon x86emu_clear_log(), this is almost bound to happen for instances that run for a long time. Let's solve the buffer fillup differently: 1.) flush the buffer when it fills up (we'd be crossing the buffer boundary) and 2.) make sure .log.ptr is allways clipped to point inside the allocated buffer.
- Loading branch information