Commit 5b833db5 authored by Vladislav Sovrasov's avatar Vladislav Sovrasov

core: forbid conversion real->int in some cases in FileStorage

parent cddf8685
...@@ -7374,22 +7374,21 @@ size_t FileNode::size() const ...@@ -7374,22 +7374,21 @@ size_t FileNode::size() const
void read(const FileNode& node, int& value, int default_value) void read(const FileNode& node, int& value, int default_value)
{ {
value = !node.node ? default_value : value = !node.node ? default_value :
CV_NODE_IS_INT(node.node->tag) ? node.node->data.i : CV_NODE_IS_INT(node.node->tag) ? node.node->data.i : std::numeric_limits<int>::max();
CV_NODE_IS_REAL(node.node->tag) ? cvRound(node.node->data.f) : 0x7fffffff;
} }
void read(const FileNode& node, float& value, float default_value) void read(const FileNode& node, float& value, float default_value)
{ {
value = !node.node ? default_value : value = !node.node ? default_value :
CV_NODE_IS_INT(node.node->tag) ? (float)node.node->data.i : CV_NODE_IS_INT(node.node->tag) ? (float)node.node->data.i :
CV_NODE_IS_REAL(node.node->tag) ? (float)node.node->data.f : 1e30f; CV_NODE_IS_REAL(node.node->tag) ? saturate_cast<float>(node.node->data.f) : std::numeric_limits<float>::max();
} }
void read(const FileNode& node, double& value, double default_value) void read(const FileNode& node, double& value, double default_value)
{ {
value = !node.node ? default_value : value = !node.node ? default_value :
CV_NODE_IS_INT(node.node->tag) ? (double)node.node->data.i : CV_NODE_IS_INT(node.node->tag) ? (double)node.node->data.i :
CV_NODE_IS_REAL(node.node->tag) ? node.node->data.f : 1e300; CV_NODE_IS_REAL(node.node->tag) ? node.node->data.f : std::numeric_limits<double>::max();
} }
void read(const FileNode& node, String& value, const String& default_value) void read(const FileNode& node, String& value, const String& default_value)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment