CybOXProject / python-cybox

A Python library for parsing, manipulating, and generating CybOX content.

Home Page:http://cybox.readthedocs.org/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

WinEventLog (possibly others) `type` field cannot be serialized to XML

bworrell opened this issue · comments

If I build a WinEventLog object and set the type field on it, I get the following error during to_xml():

Python 2.7.8 (default, Jul 28 2014, 01:34:03)
[GCC 4.8.3] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from cybox.objects.win_event_log_object import WinEventLog
>>> w = WinEventLog()
>>> w.type = "foobar"
>>> print w.to_xml()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/bworrell/.virtualenvs/openioc-to-stix/lib/python2.7/site-packages/cybox/__init__.py", line 295, in to_xml
    self.to_obj().export(
  File "/home/bworrell/.virtualenvs/openioc-to-stix/lib/python2.7/site-packages/cybox/common/object_properties.py", line 105, in to_obj
    return super(ObjectProperties, self).to_obj(return_obj=return_obj, ns_info=ns_info)
  File "/home/bworrell/.virtualenvs/openioc-to-stix/lib/python2.7/site-packages/cybox/__init__.py", line 142, in to_obj
    val = getattr(self, field.attr_name)
AttributeError: 'WinEventLog' object has no attribute 'type_'

I believe this is due to the TypedField.attrname property, which converts the XML fieldname "Type" to "type" and then appends an underscore because it's a builtin function. We should probably convert those to type_ as we did in #213.

This probably causes issues with the WinNetworkShare object's type field as well.

Related to #188.

I am using 2.1.0.11.

Yep. This never got caught in our round-trip tests since those just go to and from dictionaries, never with direct attribute assignment. This also affects Disk and DiskPartition. I'm fixing all of them.