aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/poco/Foundation/src/TextIterator.cpp
diff options
context:
space:
mode:
authoranfedotoff <anfedotoff@yandex-team.com>2023-11-30 09:29:43 +0300
committeranfedotoff <anfedotoff@yandex-team.com>2023-11-30 10:00:44 +0300
commit98ecc8deb38724114150e3758b86eb79dc9f12a9 (patch)
tree5ba7714310b2b29b4175c66c055c7815e82936f1 /contrib/libs/poco/Foundation/src/TextIterator.cpp
parent4bce8be85ae9a505d60f96e7f432382ced897988 (diff)
downloadydb-98ecc8deb38724114150e3758b86eb79dc9f12a9.tar.gz
Fix stack buffer overflow in contrib/libs/poco
Diffstat (limited to 'contrib/libs/poco/Foundation/src/TextIterator.cpp')
-rw-r--r--contrib/libs/poco/Foundation/src/TextIterator.cpp18
1 files changed, 11 insertions, 7 deletions
diff --git a/contrib/libs/poco/Foundation/src/TextIterator.cpp b/contrib/libs/poco/Foundation/src/TextIterator.cpp
index e61bad3731..f82aa7821f 100644
--- a/contrib/libs/poco/Foundation/src/TextIterator.cpp
+++ b/contrib/libs/poco/Foundation/src/TextIterator.cpp
@@ -108,12 +108,14 @@ int TextIterator::operator * () const
int read = 1;
int n = _pEncoding->queryConvert(buffer, 1);
- while (-1 > n && (_end - it) >= -n - read)
+ while (-1 > n && (_end - it) >= (-n - read) &&
+ TextEncoding::MAX_SEQUENCE_LENGTH > read)
{
- while (read < -n && it != _end)
- {
- *p++ = *it++;
- read++;
+ while (read < -n && it != _end &&
+ read < TextEncoding::MAX_SEQUENCE_LENGTH)
+ {
+ *p++ = *it++;
+ read++;
}
n = _pEncoding->queryConvert(buffer, read);
}
@@ -145,9 +147,11 @@ TextIterator& TextIterator::operator ++ ()
int read = 1;
int n = _pEncoding->sequenceLength(buffer, 1);
- while (-1 > n && (_end - _it) >= -n - read)
+ while (-1 > n && (_end - _it) >= (-n - read) &&
+ TextEncoding::MAX_SEQUENCE_LENGTH > read)
{
- while (read < -n && _it != _end)
+ while (read < -n && _it != _end &&
+ read < TextEncoding::MAX_SEQUENCE_LENGTH)
{
*p++ = *_it++;
read++;