Skip to content

TypeError when deserializing keys named "infinity" #2

@ivanjh

Description

@ivanjh
$python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import luadata
>>> data={'infinity':'string'}
int(dat>>> print(data)
{'infinity': 'string'}
>>> ser=luadata.serialize(data, form=False)
rint(ser)
deser=luadat>>> print(ser)
{infinity="string"}
a.unseri>>> deser=luadata.unserialize(ser)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/ivan/.local/lib/python3.6/site-packages/luadata/io/read.py", line 159, in unserialize
    return StreamData(src_data, 0).read_item()
  File "/home/ivan/.local/lib/python3.6/site-packages/luadata/io/read.py", line 140, in read_item
    return self.read_table()
  File "/home/ivan/.local/lib/python3.6/site-packages/luadata/io/read.py", line 99, in read_table
    item = self.read_item()
  File "/home/ivan/.local/lib/python3.6/site-packages/luadata/io/read.py", line 140, in read_item
    return self.read_table()
  File "/home/ivan/.local/lib/python3.6/site-packages/luadata/io/read.py", line 104, in read_table
    table[StreamData.format_key(item)] = self.read_item()
  File "/home/ivan/.local/lib/python3.6/site-packages/luadata/io/read.py", line 33, in format_key
    if key[0] == '[':
TypeError: 'float' object is not subscriptable
>>>

$ python3 -m pip show luadata
Name: luadata
Version: 0.2.1
Summary: Serialize and unserialize Python list & dictionary between Lua table.
Home-page: https://github.com/leafvmaple/luadata
Author: Zohar Lee
Author-email: leafvmaple@gmail.com
License: BSD License
Location: /home/ivan/.local/lib/python3.6/site-packages
Requires:

The string value "infinity" appears to being recognized as a float by python.
https://github.com/leafvmaple/luadata/blob/v0.2.1/luadata/io/read.py#L14-L19

My local fix was to explicitly detect and avoid this explicit case.

     @staticmethod
     def isfloat(string):
+        if string == "infinity":
+            return False
         try:
             float(string)
         except ValueError:
             return False
         return True

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions