[CRIU] [PATCH] crit: Fix casts for fixed and sfixed types

Pavel Emelyanov xemul at parallels.com
Wed Dec 9 07:30:40 PST 2015


On 12/09/2015 06:03 PM, Ruslan Kuprieiev wrote:
> Hm... Grep tells me that we have no double,float in our proto files and 
> have only one fixed field
> which is so_filter.
> 
> Did so_filter look right when decoding inetsk? 

It did.

> If so, this is quite strange, as we use same
> _basic_cast there. And after this patch floating point "fixed" field 
> will be decoded into integer,
> which also sounds odd.

The bug happens on encode :) pb_val.append() doesn't accept anything
but int or long.

> On 12/09/2015 04:41 PM, Pavel Emelyanov wrote:
>> The native pb engine doesn't accept types other than int or long:
>>
>> ...
>>    File "/root/src/criu/pycriu/images/pb2dict.py", line 264, in dict2pb
>>      pb_val.append(_dict2pb_cast(field, v))
>>    File "/usr/lib/python2.7/site-packages/google/protobuf/internal/containers.py", line 111, in append
>>      self._type_checker.CheckValue(value)
>>    File "/usr/lib/python2.7/site-packages/google/protobuf/internal/type_checkers.py", line 104, in CheckValue
>>      raise TypeError(message)
>> TypeError: 1.1258999068426252e+16 has type <type 'float'>, but expected one of: (<type 'int'>, <type 'long'>)
>>
>> In particular, this is seen when encoding back so_filter field from
>> inetsk image.
>>
>> Signed-off-by: Pavel Emelyanov <xemul at parallels.com>
>> ---
>>   pycriu/images/pb2dict.py | 10 ++++------
>>   1 file changed, 4 insertions(+), 6 deletions(-)
>>
>> diff --git a/pycriu/images/pb2dict.py b/pycriu/images/pb2dict.py
>> index 2f975e0..57e6dc6 100644
>> --- a/pycriu/images/pb2dict.py
>> +++ b/pycriu/images/pb2dict.py
>> @@ -24,12 +24,10 @@ import os
>>   
>>   
>>   _basic_cast = {
>> -	FD.TYPE_DOUBLE		: float,
>> -	FD.TYPE_FLOAT		: float,
>> -	FD.TYPE_FIXED64		: float,
>> -	FD.TYPE_FIXED32		: float,
>> -	FD.TYPE_SFIXED64	: float,
>> -	FD.TYPE_SFIXED32	: float,
>> +	FD.TYPE_FIXED64		: long,
>> +	FD.TYPE_FIXED32		: int,
>> +	FD.TYPE_SFIXED64	: long,
>> +	FD.TYPE_SFIXED32	: int,
>>   
>>   	FD.TYPE_INT64		: long,
>>   	FD.TYPE_UINT64		: long,
> 
> .
> 



More information about the CRIU mailing list