Setting/Getting boolean values ValueError

Bug #1479184 reported by Carlos Sanchez
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Python Memcached
New
Undecided
Unassigned

Bug Description

In Python Memcached 1.56 (w/ six-1.9.0 & Python 2.7.10)

doing

cache.set('foo', False)
cache.get('foo')

generates a ValueError: invalid literal for int() with base 10: 'False'

line 1235 memcache.py

When the method _val_to_store_info is called the path code that it is followed with a boolean is

       elif isinstance(val, int):
            flags |= Client._FLAG_INTEGER
            val = str(val)
            if six.PY3:
                val = val.encode('ascii')
            # force no attempt to compress this silly string.
            min_compress_len = 0

Since the flags bits have been set to an integer, the boolean value is changed to a string ('False'). So in the method _recv_value the code tries to change that string to an int which fails .

Revision history for this message
Carlos Sanchez (papachoco) wrote :

In In Python Memcached 1.54

the original code in _val_to_store_info is

elif isinstance(val, int):
            flags |= Client._FLAG_INTEGER
            val = "%d" % val
            # force no attempt to compress this silly string.
            min_compress_len = 0

the issue also affect when checking for long values

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.