mirror of
https://github.com/opencv/opencv.git
synced 2026-07-29 07:13:02 +04:00
core: FileStorage reads integers above INT_MAX into float/double without truncation
FileNode::operator double() and operator float() read an INT node via readInt() (32-bit), truncating values above INT_MAX -- e.g. an integer 6662329666 from an externally-produced json/yaml/xml is read back as -1927604926. The node stores the value as int64 (operator int64_t() already reads it correctly via readLong), so use readLong() for the floating-point conversions too. Values that fit in int32 are unchanged (sign-extended); larger ones are now correct. Reader side of #29363 (the writer side was #29364).
This commit is contained in:
@@ -2376,7 +2376,7 @@ FileNode::operator float() const
|
||||
|
||||
if( type == INT )
|
||||
{
|
||||
return (float)readInt(p);
|
||||
return (float)readLong(p);
|
||||
}
|
||||
else if( type == REAL )
|
||||
{
|
||||
@@ -2397,7 +2397,7 @@ FileNode::operator double() const
|
||||
|
||||
if( type == INT )
|
||||
{
|
||||
return (double)readInt(p);
|
||||
return (double)readLong(p);
|
||||
}
|
||||
else if( type == REAL )
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user