summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Tardon <dtardon@redhat.com>2017-09-15 21:33:54 +0200
committerDavid Tardon <dtardon@redhat.com>2017-09-15 21:33:54 +0200
commit30fa9bc78c1112ebb0a6778d0b8120b9a1fa8ab5 (patch)
treeb948e43a1c5f74324d1efaa5c258ffcef96983c7
parent20577bbcc4738de4e106503de36993f17295c79b (diff)
cid#1371577 sanitize loop boundslibcdr-0.1.4
Change-Id: Iaeff2dbce1cd8b5cd5863c77ae20adf6eb698076
-rw-r--r--src/lib/CMXParser.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/lib/CMXParser.cpp b/src/lib/CMXParser.cpp
index 625867d..26fd3e4 100644
--- a/src/lib/CMXParser.cpp
+++ b/src/lib/CMXParser.cpp
@@ -1142,6 +1142,8 @@ bool libcdr::CMXParser::readFill(librevenge::RVNGInputStream *input)
case CMX_Tag_RenderAttr_FillSpec_Fountain_Color:
{
unsigned short colorCount = readU16(input, m_bigEndian);
+ if (colorCount > getRemainingLength(input) / 4)
+ colorCount = getRemainingLength(input) / 4;
for (unsigned short i = 0; i < colorCount; ++i)
{
unsigned short colorRef = readU16(input, m_bigEndian);
@@ -1173,6 +1175,8 @@ bool libcdr::CMXParser::readFill(librevenge::RVNGInputStream *input)
/* unsigned short steps = */ readU16(input, m_bigEndian);
gradient.m_mode = (unsigned char)(readU16(input, m_bigEndian) & 0xff);
unsigned short colorCount = readU16(input, m_bigEndian);
+ if (colorCount > getRemainingLength(input) / 4)
+ colorCount = getRemainingLength(input) / 4;
for (unsigned short i = 0; i < colorCount; ++i)
{
unsigned short colorRef = readU16(input, m_bigEndian);
@@ -1193,6 +1197,8 @@ bool libcdr::CMXParser::readFill(librevenge::RVNGInputStream *input)
{
/* unsigned atom = */ readU32(input, m_bigEndian);
unsigned short count = readU16(input, m_bigEndian);
+ if (count > getRemainingLength(input) / 2)
+ count = getRemainingLength(input) / 2;
for (unsigned short i = 0; i < count; ++i)
readU16(input, m_bigEndian);
readString(input);