aboutsummaryrefslogtreecommitdiff
path: root/cpp/src/sfntly/data/writable_font_data.cc
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/sfntly/data/writable_font_data.cc')
-rw-r--r--cpp/src/sfntly/data/writable_font_data.cc9
1 files changed, 7 insertions, 2 deletions
diff --git a/cpp/src/sfntly/data/writable_font_data.cc b/cpp/src/sfntly/data/writable_font_data.cc
index 7f6f72f..073e9df 100644
--- a/cpp/src/sfntly/data/writable_font_data.cc
+++ b/cpp/src/sfntly/data/writable_font_data.cc
@@ -16,6 +16,9 @@
#include "sfntly/data/writable_font_data.h"
+#include <algorithm>
+#include <limits>
+
#include "sfntly/data/memory_byte_array.h"
#include "sfntly/data/growable_memory_byte_array.h"
@@ -165,7 +168,9 @@ void WritableFontData::CopyFrom(InputStream* is) {
CALLER_ATTACH FontData* WritableFontData::Slice(int32_t offset,
int32_t length) {
- if (offset < 0 || offset + length > Size()) {
+ if (offset < 0 || length < 0 ||
+ offset > std::numeric_limits<int32_t>::max() - length ||
+ offset + length > Size()) {
#if !defined (SFNTLY_NO_EXCEPTION)
throw IndexOutOfBoundsException(
"Attempt to bind data outside of its limits");
@@ -177,7 +182,7 @@ CALLER_ATTACH FontData* WritableFontData::Slice(int32_t offset,
}
CALLER_ATTACH FontData* WritableFontData::Slice(int32_t offset) {
- if (offset > Size()) {
+ if (offset < 0 || offset > Size()) {
#if !defined (SFNTLY_NO_EXCEPTION)
throw IndexOutOfBoundsException(
"Attempt to bind data outside of its limits");