summaryrefslogtreecommitdiffstats
path: root/RichString.c
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2018-02-26 11:05:12 -0300
committerHisham Muhammad <hisham@gobolinux.org>2018-02-26 11:05:12 -0300
commit858af2505fe80e4175121ada95714443ea63e4de (patch)
tree062ab3e9e036f21edd2a4b7efab5988b61a96a1a /RichString.c
parent655c7293d2f984a52fba43d19fbd15d102992eb6 (diff)
Protect against overflows in RichString_setAttrn
Diffstat (limited to 'RichString.c')
-rw-r--r--RichString.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/RichString.c b/RichString.c
index e7dd4e83..370566a8 100644
--- a/RichString.c
+++ b/RichString.c
@@ -63,6 +63,10 @@ typedef struct RichString_ {
}*/
+#ifndef CLAMP
+#define CLAMP(x,low,high) (((x)>(high))?(high):(((x)<(low))?(low):(x)))
+#endif
+
#define charBytes(n) (sizeof(CharType) * (n))
static void RichString_extendLen(RichString* this, int len) {
@@ -103,6 +107,7 @@ static inline void RichString_writeFrom(RichString* this, int attrs, const char*
inline void RichString_setAttrn(RichString* this, int attrs, int start, int finish) {
cchar_t* ch = this->chptr + start;
+ finish = CLAMP(finish, 0, this->chlen - 1);
for (int i = start; i <= finish; i++) {
ch->attr = attrs;
ch++;
@@ -132,6 +137,7 @@ static inline void RichString_writeFrom(RichString* this, int attrs, const char*
void RichString_setAttrn(RichString* this, int attrs, int start, int finish) {
chtype* ch = this->chptr + start;
+ finish = CLAMP(finish, 0, this->chlen - 1);
for (int i = start; i <= finish; i++) {
*ch = (*ch & 0xff) | attrs;
ch++;

© 2014-2024 Faster IT GmbH | imprint | privacy policy