The following diff corrects the flaws I've mentioned earlier with
regards to ISO 8613-6 colors; to repeat, these flaws include not
permitting colons to be used as seperators and incorrectly parsing RGB
color parameters; only six lines are changed and changed very little at
that, but I'll still release these six changed lines to the public
domain, for simplicity:

diff -c /home/programmer/st-0.8.1/st.c\~ /home/programmer/st-0.8.1/st.c
*** /home/programmer/st-0.8.1/st.c~     Tue Mar 20 15:29:59 2018
--- /home/programmer/st-0.8.1/st.c      Fri Jul 13 19:32:43 2018
***************
*** 1157,1163 ****
                        v = -1;
                csiescseq.arg[csiescseq.narg++] = v;
                p = np;
!               if (*p != ';' || csiescseq.narg == ESC_ARG_SIZ)
                        break;
                p++;
        }
--- 1157,1163 ----
                        v = -1;
                csiescseq.arg[csiescseq.narg++] = v;
                p = np;
!               if (*p != ';' || *p != ':' || csiescseq.narg == ESC_ARG_SIZ)
                        break;
                p++;
        }
***************
*** 1311,1326 ****

        switch (attr[*npar + 1]) {
        case 2: /* direct color in RGB space */
!               if (*npar + 4 >= l) {
                        fprintf(stderr,
                                "erresc(38): Incorrect number of parameters 
(%d)\n",
                                *npar);
                        break;
                }
!               r = attr[*npar + 2];
!               g = attr[*npar + 3];
!               b = attr[*npar + 4];
!               *npar += 4;
                if (!BETWEEN(r, 0, 255) || !BETWEEN(g, 0, 255) || !BETWEEN(b, 
0, 255))
                        fprintf(stderr, "erresc: bad rgb color (%u,%u,%u)\n",
                                r, g, b);
--- 1311,1326 ----

        switch (attr[*npar + 1]) {
        case 2: /* direct color in RGB space */
!               if (*npar + 5 >= l) {
                        fprintf(stderr,
                                "erresc(38): Incorrect number of parameters 
(%d)\n",
                                *npar);
                        break;
                }
!               r = attr[*npar + 3];
!               g = attr[*npar + 4];
!               b = attr[*npar + 5];
!               *npar += 5;
                if (!BETWEEN(r, 0, 255) || !BETWEEN(g, 0, 255) || !BETWEEN(b, 
0, 255))
                        fprintf(stderr, "erresc: bad rgb color (%u,%u,%u)\n",
                                r, g, b);

Diff finished.  Fri Jul 13 19:33:32 2018

Reply via email to