What steps will reproduce the problem?
1. Download the attached code (trace_sniffer.cpp)
2. Compile it, run it as 'sudo ./trace_sniffer www.google.com 80'
What is the expected output? What do you see instead?
The expected output is:
----
Tracing www.google.com (74.125.224.49) at 80...
1 10.0.0.1 10.0.0.1 10.0.0.1
2 192.168.7.254 192.168.7.254 192.168.7.254
3 108.94.24.3 108.94.24.3 108.94.24.3
4 * * *
5 * * *
6 12.83.39.141 12.83.39.141 *
7 * * *
8 * * *
9 * * *
10 12.122.114.21 12.249.231.14 12.249.231.14
11 * * *
12 209.85.249.3 209.85.249.3 *
13 74.125.224.49 * *
----
Instead, I see:
----
Tracing www.google.com (74.125.224.148) at 80...
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Program received signal SIGABRT, Aborted.
----
What version of the product are you using? On what operating system?
Latest (HEAD), on Ubuntu 11.10.
Please provide any additional information below.
I also attached a packet capture from the program running. Also, running
'backtrace' on gdb gives me the following stack:
----
#0 0x00130416 in __kernel_vsyscall ()
#1 0x002d4c8f in raise () from /lib/i386-linux-gnu/libc.so.6
#2 0x002d82b5 in abort () from /lib/i386-linux-gnu/libc.so.6
#3 0x0024f4ed in __gnu_cxx::__verbose_terminate_handler() () from
/usr/lib/i386-linux-gnu/libstdc++.so.6
#4 0x0024d283 in ?? () from /usr/lib/i386-linux-gnu/libstdc++.so.6
#5 0x0024d2bf in std::terminate() () from
/usr/lib/i386-linux-gnu/libstdc++.so.6
#6 0x0024d40e in __cxa_throw () from /usr/lib/i386-linux-gnu/libstdc++.so.6
#7 0x0024da2f in operator new(unsigned int) () from
/usr/lib/i386-linux-gnu/libstdc++.so.6
#8 0x0024dafb in operator new[](unsigned int) () from
/usr/lib/i386-linux-gnu/libstdc++.so.6
#9 0x00180df0 in inflate (increase=-12, this=0xb7bf2140) at
crafter/Payload.cpp:37
#10 Crafter::Payload::inflate (this=0xb7bf2140, increase=-12) at
crafter/Payload.cpp:34
#11 0x00180e7e in Crafter::Payload::SetPayload (this=0xb7bf2140, data=0x805f314
"", ndata=4294967284) at crafter/Payload.cpp:76
#12 0x00175545 in Crafter::Layer::SetPayload (this=0xb7bf20f8, data=0x805f314
"", ndata=-12) at crafter/Layer.cpp:381
#13 0x0017842f in Crafter::Packet::PacketFromIP (this=0xb7bf21d0,
data=0x805f2e0 "E") at crafter/Packet.cpp:372
#14 0x001788a7 in Crafter::Packet::PacketFromIP (this=0xb7bf21d0, data=...) at
crafter/Packet.cpp:587
#15 0x08049deb in packetHandler (packet=0xb7bf2248, user=0x0) at
trace_sniffer.cpp:30
#16 0x00181e07 in process_packet (user=0x8057a30 "", header=0xb7bf22b4,
packet=0xb7c03046 "\b") at crafter/Sniffer.cpp:59
#17 0x00446d44 in ?? () from /usr/lib/i386-linux-gnu/libpcap.so.0.8
#18 0x00449651 in pcap_loop () from /usr/lib/i386-linux-gnu/libpcap.so.0.8
#19 0x00182432 in Crafter::Sniffer::Capture (this=0xbffff5ac, count=0,
user=0x6) at crafter/Sniffer.cpp:287
#20 0x0018254b in SpawnThread (thread_arg=0x8059318) at crafter/Sniffer.cpp:303
#21 0x0042bd31 in start_thread () from /lib/i386-linux-gnu/libpthread.so.0
#22 0x0037a46e in clone () from /lib/i386-linux-gnu/libc.so.6
----