On 19/05/11 01:12, Harald Welte wrote:
Hi all,
On Wed, May 18, 2011 at 04:10:20PM +0200, Holger Freyther wrote:
The easiest guess is that we either need the
va_start/va_end inside the loop
of _output, or need to copy the arguments again. to reproduce we should
probably use the same arch and GCC/(E)GLIBC version that harald is using.
My testing is on Debian unstable on x86_64 (libc6-2.13-4). As
indicated, reverting the commit Pablo indicated has fixed the problem.
I have not seen the problem manifset itself on Ubuntu 11.04 on i386.
While reading the manpages, I noticed this:
"The functions vprintf(), vfprintf(), vsprintf(), vsnprintf() are
equivalent to the functions printf(), fprintf(), sprintf(), snprintf(),
respectively, except that they are called with a va_list instead of a
variable number of arguments. These functions do not call the va_end
macro. Consequently, the value of ap is undefined after the call. The
application should call va_end(ap) itself afterwards."
I have attached a patch, it basically restores:
http://cgit.osmocom.org/cgit/libosmocore/commit/?id=81e9636454294ae10ef9bc8…
But it includes a better notice.
Please, apply.
Thanks!