https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=7624
Summary: epan/dissectors/packet-per.c
dissect_per_constrained_integer_64b fails for 64 bits.
Product: Wireshark
Version: SVN
Platform: x86
OS/Version: All
Status: NEW
Severity: Normal
Priority: Low
Component: Dissection engine (libwireshark)
AssignedTo: bugzilla-admin@xxxxxxxxxxxxx
ReportedBy: jfcmdejongh@xxxxxxxxx
Created attachment 8948
--> https://bugs.wireshark.org/bugzilla/attachment.cgi?id=8948
Patch file.
Build Information:
Compiled (32-bit) with GTK+ 2.24.10, with Cairo 1.10.2, with Pango 1.30.0, with
GLib 2.32.3, with libpcap, with libz 1.2.5, with POSIX capabilities (Linux),
without SMI, without c-ares, without ADNS, without Lua, without Python, with
GnuTLS 2.12.17, with Gcrypt 1.5.0, with MIT Kerberos, without GeoIP, without
PortAudio, with AirPcap.
Running on Linux 3.4.4-3.fc17.i686, with locale en_US.UTF-8, with libpcap
version 1.2.1, with libz 1.2.5, GnuTLS 2.12.17, Gcrypt 1.5.0, without AirPcap.
Built using gcc 4.7.0 20120507 (Red Hat 4.7.0-5).
--
Applicable to 1.8.1 and svn (20120813):
The following piece of code in epan/dissectors/packet-per.c, function
dissect_per_constrained_integer_64b fails with UPER, because the number of bits
required is still calculated with 32-bit masks:
guint32 mask,mask2;
/* We only handle 32 bit integers */
mask = 0x80000000;
mask2 = 0x7fffffff;
i = 32;
while ((range & mask)== 0){
i = i - 1;
mask = mask>>1;
mask2 = mask2>>1;
}
if ((range & mask2) == 0)
i = i-1;
Suggestion for fix (patch attached):
guint64 mask,mask2;
/* We only handle 64 bit integers */
mask = G_GINT64_CONSTANT(0x8000000000000000);
mask2 = G_GINT64_CONSTANT(0x7fffffffffffffff);
i = 64;
while ((range & mask)== 0){
i = i - 1;
mask = mask>>1;
mask2 = mask2>>1;
}
if ((range & mask2) == 0)
i = i-1;
- JdJ
--
Configure bugmail: https://bugs.wireshark.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are watching all bug changes.