mirror of
https://github.com/opencv/opencv.git
synced 2024-11-29 13:47:32 +08:00
core(persistence): add more checks for implementation limitations
This commit is contained in:
parent
417034518c
commit
f42d5399aa
@ -578,10 +578,14 @@ public:
|
||||
sz = (int)(ptr - beg);
|
||||
if( sz > 0 )
|
||||
{
|
||||
if (i + sz >= CV_FS_MAX_LEN)
|
||||
CV_PARSE_ERROR_CPP("string is too long");
|
||||
memcpy(buf + i, beg, sz);
|
||||
i += sz;
|
||||
}
|
||||
ptr++;
|
||||
if (i + 1 >= CV_FS_MAX_LEN)
|
||||
CV_PARSE_ERROR_CPP("string is too long");
|
||||
switch ( *ptr )
|
||||
{
|
||||
case '\\':
|
||||
@ -605,6 +609,8 @@ public:
|
||||
sz = (int)(ptr - beg);
|
||||
if( sz > 0 )
|
||||
{
|
||||
if (i + sz >= CV_FS_MAX_LEN)
|
||||
CV_PARSE_ERROR_CPP("string is too long");
|
||||
memcpy(buf + i, beg, sz);
|
||||
i += sz;
|
||||
}
|
||||
@ -620,6 +626,8 @@ public:
|
||||
sz = (int)(ptr - beg);
|
||||
if( sz > 0 )
|
||||
{
|
||||
if (i + sz >= CV_FS_MAX_LEN)
|
||||
CV_PARSE_ERROR_CPP("string is too long");
|
||||
memcpy(buf + i, beg, sz);
|
||||
i += sz;
|
||||
}
|
||||
|
@ -627,6 +627,8 @@ public:
|
||||
c = '\"';
|
||||
else
|
||||
{
|
||||
if (len + 2 + i >= CV_FS_MAX_LEN)
|
||||
CV_PARSE_ERROR_CPP("string is too long");
|
||||
memcpy( strbuf + i, ptr-1, len + 2 );
|
||||
i += len + 2;
|
||||
}
|
||||
@ -635,9 +637,9 @@ public:
|
||||
CV_PERSISTENCE_CHECK_END_OF_BUFFER_BUG_CPP();
|
||||
}
|
||||
}
|
||||
if (i + 1 >= CV_FS_MAX_LEN)
|
||||
CV_PARSE_ERROR_CPP("Too long string literal");
|
||||
strbuf[i++] = c;
|
||||
if( i >= CV_FS_MAX_LEN )
|
||||
CV_PARSE_ERROR_CPP( "Too long string literal" );
|
||||
}
|
||||
elem->setValue(FileNode::STRING, strbuf, i);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user