Skip to content

Commit

Permalink
rsdos: fix str() method segfault for schema version 1
Browse files Browse the repository at this point in the history
 * Don't include fields in the string that don't exist in schema
   version 1.
 * Decode string fields to 'utf-8' before adding to str() result.
 * Rename 'attacker_ip_count' to 'attacker_slash16_count' for v2
   asDict() result.
  • Loading branch information
salcock committed May 16, 2021
1 parent 4ef4967 commit 4ab4ee2
Showing 1 changed file with 23 additions and 3 deletions.
26 changes: 23 additions & 3 deletions src/pyavro_stardust/rsdos.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,25 @@ cdef class AvroRsdos(AvroRecord):
self.schemaversion = 1

def __str__(self):
return "%u %u.%06u %u.%06u %08x %u %u %u %u %u %u %u %u %u %s %s" % \
if self.schemaversion == 1:
return "%u v1 %u.%06u %u.%06u %08x %u %u %u %u %u %u %u %u %u ?? ??" % \
(self.attributes_l[<int>ATTR_RSDOS_TIMESTAMP], \
self.attributes_l[<int>ATTR_RSDOS_START_TIME_SEC],
self.attributes_l[<int>ATTR_RSDOS_START_TIME_USEC],
self.attributes_l[<int>ATTR_RSDOS_LATEST_TIME_SEC],
self.attributes_l[<int>ATTR_RSDOS_LATEST_TIME_USEC],
self.attributes_l[<int>ATTR_RSDOS_TARGET_IP],
self.attributes_l[<int>ATTR_RSDOS_TARGET_PROTOCOL],
self.attributes_l[<int>ATTR_RSDOS_PACKET_LEN],
self.attributes_l[<int>ATTR_RSDOS_ATTACKER_IP_CNT],
self.attributes_l[<int>ATTR_RSDOS_ATTACK_PORT_CNT],
self.attributes_l[<int>ATTR_RSDOS_TARGET_PORT_CNT],
self.attributes_l[<int>ATTR_RSDOS_PACKET_CNT],
self.attributes_l[<int>ATTR_RSDOS_BYTE_CNT],
self.attributes_l[<int>ATTR_RSDOS_MAX_PPM_INTERVAL],
self.getRsdosPacketSize())

return "%u v2 %u.%06u %u.%06u %08x %u %u %u %u %u %u %u %u %u %s %s" % \
(self.attributes_l[<int>ATTR_RSDOS_TIMESTAMP], \
self.attributes_l[<int>ATTR_RSDOS_START_TIME_SEC],
self.attributes_l[<int>ATTR_RSDOS_START_TIME_USEC],
Expand All @@ -65,8 +83,8 @@ cdef class AvroRsdos(AvroRecord):
self.attributes_l[<int>ATTR_RSDOS_BYTE_CNT],
self.attributes_l[<int>ATTR_RSDOS_MAX_PPM_INTERVAL],
self.getRsdosPacketSize(),
self.attributes_s[<int>ATTR_RSDOS_MAXMIND_CONTINENT],
self.attributes_s[<int>ATTR_RSDOS_MAXMIND_COUNTRY])
self.attributes_s[<int>ATTR_RSDOS_MAXMIND_CONTINENT].decode('utf-8'),
self.attributes_s[<int>ATTR_RSDOS_MAXMIND_COUNTRY].decode('utf-8'))

cpdef dict asDict(self):
cdef dict result
Expand Down Expand Up @@ -96,6 +114,8 @@ cdef class AvroRsdos(AvroRecord):
}

if self.schemaversion == 2:
del(result["attacker_count"])
result["attacker_slash16_count"] = self.attributes_l[<int>ATTR_RSDOS_ATTACKER_IP_CNT]
result['first_attack_port'] = self.attributes_l[<int>ATTR_RSDOS_FIRST_ATTACK_PORT]
result['first_target_port'] = self.attributes_l[<int>ATTR_RSDOS_FIRST_TARGET_PORT]
result['maxmind_continent'] = self.attributes_s[<int>ATTR_RSDOS_MAXMIND_CONTINENT]
Expand Down

0 comments on commit 4ab4ee2

Please sign in to comment.