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=81e9636454294ae10ef9bc8b...
But it includes a better notice.
Please, apply. Thanks!