commit a6bbc0c96b0a1db804061b0db79101c6b26aec57
Author:     Peter Hofmann <[email protected]>
AuthorDate: Sat Oct 7 07:39:00 2023 +0200
Commit:     Hiltjo Posthuma <[email protected]>
CommitDate: Sat Oct 7 12:16:59 2023 +0200

    Fix bounds checks of dc.col
    
    dc.collen is the length of dc.col, not the maximum index, hence if x is
    equal to dc.collen, then it's an error.
    
    With config.def.h, the last valid index is 259, so this correctly
    reports "black":
    
        $ printf '\033]4;259;?\e\\'
    
    260 is an invalid index and this reports garbage instead of printing an
    error:
    
        $ printf '\033]4;260;?\e\\'

diff --git a/x.c b/x.c
index aa09997..b36fb8c 100644
--- a/x.c
+++ b/x.c
@@ -818,7 +818,7 @@ xloadcols(void)
 int
 xgetcolor(int x, unsigned char *r, unsigned char *g, unsigned char *b)
 {
-       if (!BETWEEN(x, 0, dc.collen))
+       if (!BETWEEN(x, 0, dc.collen - 1))
                return 1;
 
        *r = dc.col[x].color.red >> 8;
@@ -833,7 +833,7 @@ xsetcolorname(int x, const char *name)
 {
        Color ncolor;
 
-       if (!BETWEEN(x, 0, dc.collen))
+       if (!BETWEEN(x, 0, dc.collen - 1))
                return 1;
 
        if (!xloadcolor(x, name, &ncolor))

Reply via email to