mirror of
https://github.com/opencv/opencv.git
synced 2024-11-30 14:29:49 +08:00
Merge pull request #15145 from alalek:fix_15127
This commit is contained in:
commit
79859ebca3
@ -296,6 +296,8 @@ public:
|
||||
|
||||
while ( is_eof == false && is_completed == false )
|
||||
{
|
||||
if (!ptr)
|
||||
CV_PARSE_ERROR_CPP("Invalid input");
|
||||
switch ( *ptr )
|
||||
{
|
||||
/* comment */
|
||||
@ -381,6 +383,7 @@ public:
|
||||
if ( is_eof || !is_completed )
|
||||
{
|
||||
ptr = fs->bufferStart();
|
||||
CV_Assert(ptr);
|
||||
*ptr = '\0';
|
||||
fs->setEof();
|
||||
if( !is_completed )
|
||||
@ -392,6 +395,9 @@ public:
|
||||
|
||||
char* parseKey( char* ptr, FileNode& collection, FileNode& value_placeholder )
|
||||
{
|
||||
if (!ptr)
|
||||
CV_PARSE_ERROR_CPP("Invalid input");
|
||||
|
||||
if( *ptr != '"' )
|
||||
CV_PARSE_ERROR_CPP( "Key must start with \'\"\'" );
|
||||
|
||||
@ -430,6 +436,9 @@ public:
|
||||
|
||||
char* parseValue( char* ptr, FileNode& node )
|
||||
{
|
||||
if (!ptr)
|
||||
CV_PARSE_ERROR_CPP("Invalid value input");
|
||||
|
||||
ptr = skipSpaces( ptr );
|
||||
if( !ptr || !*ptr )
|
||||
CV_PARSE_ERROR_CPP( "Unexpected End-Of-File" );
|
||||
@ -817,6 +826,9 @@ public:
|
||||
|
||||
bool parse( char* ptr )
|
||||
{
|
||||
if (!ptr)
|
||||
CV_PARSE_ERROR_CPP("Invalid input");
|
||||
|
||||
ptr = skipSpaces( ptr );
|
||||
if ( !ptr || !*ptr )
|
||||
return false;
|
||||
|
@ -360,6 +360,9 @@ public:
|
||||
|
||||
char* skipSpaces( char* ptr, int mode )
|
||||
{
|
||||
if (!ptr)
|
||||
CV_PARSE_ERROR_CPP("Invalid input");
|
||||
|
||||
int level = 0;
|
||||
|
||||
for(;;)
|
||||
@ -441,6 +444,9 @@ public:
|
||||
|
||||
char* parseValue( char* ptr, FileNode& node )
|
||||
{
|
||||
if (!ptr)
|
||||
CV_PARSE_ERROR_CPP("Invalid input");
|
||||
|
||||
FileNode new_elem;
|
||||
bool have_space = true;
|
||||
int value_type = node.type();
|
||||
@ -456,6 +462,8 @@ public:
|
||||
(c == '<' && ptr[1] == '!' && ptr[2] == '-') )
|
||||
{
|
||||
ptr = skipSpaces( ptr, 0 );
|
||||
if (!ptr)
|
||||
CV_PARSE_ERROR_CPP("Invalid input");
|
||||
have_space = true;
|
||||
c = *ptr;
|
||||
}
|
||||
@ -502,6 +510,8 @@ public:
|
||||
{
|
||||
ptr = fs->parseBase64( ptr, 0, new_elem);
|
||||
ptr = skipSpaces( ptr, 0 );
|
||||
if (!ptr)
|
||||
CV_PARSE_ERROR_CPP("Invalid input");
|
||||
}
|
||||
|
||||
ptr = parseTag( ptr, key2, type_name, tag_type );
|
||||
@ -645,6 +655,9 @@ public:
|
||||
char* parseTag( char* ptr, std::string& tag_name,
|
||||
std::string& type_name, int& tag_type )
|
||||
{
|
||||
if (!ptr)
|
||||
CV_PARSE_ERROR_CPP("Invalid tag input");
|
||||
|
||||
if( *ptr == '\0' )
|
||||
CV_PARSE_ERROR_CPP( "Unexpected end of the stream" );
|
||||
|
||||
@ -702,6 +715,8 @@ public:
|
||||
if( *ptr != '=' )
|
||||
{
|
||||
ptr = skipSpaces( ptr, CV_XML_INSIDE_TAG );
|
||||
if (!ptr)
|
||||
CV_PARSE_ERROR_CPP("Invalid attribute");
|
||||
if( *ptr != '=' )
|
||||
CV_PARSE_ERROR_CPP( "Attribute name should be followed by \'=\'" );
|
||||
}
|
||||
@ -740,6 +755,8 @@ public:
|
||||
if( c != '>' )
|
||||
{
|
||||
ptr = skipSpaces( ptr, CV_XML_INSIDE_TAG );
|
||||
if (!ptr)
|
||||
CV_PARSE_ERROR_CPP("Invalid input");
|
||||
c = *ptr;
|
||||
}
|
||||
|
||||
@ -781,6 +798,8 @@ public:
|
||||
|
||||
// CV_XML_INSIDE_TAG is used to prohibit leading comments
|
||||
ptr = skipSpaces( ptr, CV_XML_INSIDE_TAG );
|
||||
if (!ptr)
|
||||
CV_PARSE_ERROR_CPP("Invalid input");
|
||||
|
||||
if( memcmp( ptr, "<?xml", 5 ) != 0 ) // FIXIT ptr[1..] - out of bounds read without check
|
||||
CV_PARSE_ERROR_CPP( "Valid XML should start with \'<?xml ...?>\'" );
|
||||
@ -791,6 +810,8 @@ public:
|
||||
while( ptr && *ptr != '\0' )
|
||||
{
|
||||
ptr = skipSpaces( ptr, 0 );
|
||||
if (!ptr)
|
||||
CV_PARSE_ERROR_CPP("Invalid input");
|
||||
|
||||
if( *ptr != '\0' )
|
||||
{
|
||||
|
@ -330,6 +330,9 @@ public:
|
||||
|
||||
char* skipSpaces( char* ptr, int min_indent, int max_comment_indent )
|
||||
{
|
||||
if (!ptr)
|
||||
CV_PARSE_ERROR_CPP("Invalid input");
|
||||
|
||||
for(;;)
|
||||
{
|
||||
while( *ptr == ' ' )
|
||||
@ -374,6 +377,9 @@ public:
|
||||
|
||||
bool getBase64Row(char* ptr, int indent, char* &beg, char* &end)
|
||||
{
|
||||
if (!ptr)
|
||||
CV_PARSE_ERROR_CPP("Invalid input");
|
||||
|
||||
beg = end = ptr = skipSpaces(ptr, 0, INT_MAX);
|
||||
if (!ptr || !*ptr)
|
||||
return false; // end of file
|
||||
@ -394,6 +400,9 @@ public:
|
||||
|
||||
char* parseKey( char* ptr, FileNode& map_node, FileNode& value_placeholder )
|
||||
{
|
||||
if (!ptr)
|
||||
CV_PARSE_ERROR_CPP("Invalid input");
|
||||
|
||||
char c;
|
||||
char *endptr = ptr - 1, *saveptr;
|
||||
|
||||
@ -422,6 +431,9 @@ public:
|
||||
|
||||
char* parseValue( char* ptr, FileNode& node, int min_indent, bool is_parent_flow )
|
||||
{
|
||||
if (!ptr)
|
||||
CV_PARSE_ERROR_CPP("Invalid input");
|
||||
|
||||
char* endptr = 0;
|
||||
char c = ptr[0], d = ptr[1];
|
||||
int value_type = FileNode::NONE;
|
||||
@ -508,6 +520,8 @@ public:
|
||||
|
||||
*endptr = d;
|
||||
ptr = skipSpaces( endptr, min_indent, INT_MAX );
|
||||
if (!ptr)
|
||||
CV_PARSE_ERROR_CPP("Invalid input");
|
||||
|
||||
c = *ptr;
|
||||
|
||||
@ -634,6 +648,8 @@ public:
|
||||
FileNode elem;
|
||||
|
||||
ptr = skipSpaces( ptr, new_min_indent, INT_MAX );
|
||||
if (!ptr)
|
||||
CV_PARSE_ERROR_CPP("Invalid input");
|
||||
if( *ptr == '}' || *ptr == ']' )
|
||||
{
|
||||
if( *ptr != d )
|
||||
@ -647,6 +663,8 @@ public:
|
||||
if( *ptr != ',' )
|
||||
CV_PARSE_ERROR_CPP( "Missing , between the elements" );
|
||||
ptr = skipSpaces( ptr + 1, new_min_indent, INT_MAX );
|
||||
if (!ptr)
|
||||
CV_PARSE_ERROR_CPP("Invalid input");
|
||||
}
|
||||
|
||||
if( struct_type == FileNode::MAP )
|
||||
@ -746,6 +764,9 @@ public:
|
||||
|
||||
bool parse( char* ptr )
|
||||
{
|
||||
if (!ptr)
|
||||
CV_PARSE_ERROR_CPP("Invalid input");
|
||||
|
||||
bool first = true;
|
||||
bool ok = true;
|
||||
FileNode root_collection(fs->getFS(), 0, 0);
|
||||
|
Loading…
Reference in New Issue
Block a user