On Fri, Aug 04, 2006 at 12:56:11PM +0100, Neil Piercy wrote:
> same execution path in this area. The big difference between the request 
> and the response is that the _values_ of the 64 bit monotonic replay 
> detection counter: the requests use very small values, the responses use 
> huge values (i.e. all bytes of the 64 bit values are non-zero).

Nice find! It has MSB set.

> The crash definitely happens deep in the glib handling of the 
> g_vsnprintf - I dont have a debug build of glib, but it looked like it 
> went into the guts of the core gnulib/vasnprintf, where it hit an abort 
> call. Without the debug lib it is difficult to see where or why.
> 
> Bottom line: looks to me like a glib bug or a build incompatibility 
> between guint64 handling in the glib binary and ethereal perhaps?

OK, I've created a small testprogram (under Suse 10.1) which you should
compile as similar as possible to the way you compile Wireshark. Let's
see whether it crashes and if so, where. I hope the program doesn't much
tweaking to compile on W32.

 ciao
     Joerg
-- 
Joerg Mayer                                           <[EMAIL PROTECTED]>
We are stuck with technology when what we really want is just stuff that
works. Some say that should read Microsoft instead of technology.
/* Testprogram for http://bugs.wireshark.org/bugzilla/show_bug.cgi?id=1025
 *
 * Compile with:
 * gcc -Wall `pkg-config --cflags glib-2.0` `pkg-config --libs glib-2.0` -o 
gtest64  gtest64.c
 * which expands on my system to
 * gcc -Wall -I/opt/gnome/include/glib-2.0 -I/opt/gnome/lib/glib-2.0/include 
-L/opt/gnome/lib -lglib-2.0 -o gtest64  gtest64.c

 * Finally, run with ./gtest64 or something like that.
 */

#include <glib.h>
#include <glib/gprintf.h>

/* Formats for printing 64-bit unsigned hexadecimal numbers */
#ifndef PRIx64
#ifdef _MSC_EXTENSIONS
#define PRIx64  "I64x"
#else /* _MSC_EXTENSIONS */
#define PRIx64  "llx"
#endif /* _MSC_EXTENSIONS */
#endif /* PRIx64 */

#define BUFLEN 100
char buffer[BUFLEN];

guint64 test1 = G_GINT64_CONSTANT(0x11223344U);
guint64 test2 = G_GINT64_CONSTANT(0x11223344556677U);
guint64 test3 = G_GINT64_CONSTANT(0x1122334455667788U);
guint64 test4 = G_GINT64_CONSTANT(0xFFEEDDCC11223344U);

void
printit(const char *format, ...)
{
        va_list ap;

        va_start(ap, format);
        g_vsnprintf(buffer, BUFLEN, format, ap);
        g_printf("%s\n", buffer);
        va_end(ap);
}



int main() {
        printit("Test1: %" PRIx64 , test1);
        printit("Test2: %" PRIx64 , test2);
        printit("Test3: %" PRIx64 , test3);
        printit("Test4: %" PRIx64 , test4);
        return 0;
}
_______________________________________________
Wireshark-dev mailing list
Wireshark-dev@wireshark.org
http://www.wireshark.org/mailman/listinfo/wireshark-dev

Reply via email to