Cleanup and rename replace_color() to put_color(), including sanity-checking of
foreground color code - this ensures that if a wild color code makes it this far, it doesn't crash the client. git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@121 13b04d17-f746-0410-82c6-800466cd88b0
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
[Changes 1.2c01]
|
[Changes 1.2c01]
|
||||||
|
|
||||||
|
* [1.1s01] Sanity check color codes, fixes a potential crash. (caf)
|
||||||
|
|
||||||
* Add /FSET USERMODE_OTHER to correctly format user mode changes where the
|
* Add /FSET USERMODE_OTHER to correctly format user mode changes where the
|
||||||
source isn't the same as the target, reported by gauze. (caf)
|
source isn't the same as the target, reported by gauze. (caf)
|
||||||
|
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ static int display_color (long color1, long color2);
|
|||||||
static void display_normal (void);
|
static void display_normal (void);
|
||||||
static char display_altcharset (int flag);
|
static char display_altcharset (int flag);
|
||||||
|
|
||||||
static char *replace_color (int, int);
|
static void put_color (int, int);
|
||||||
|
|
||||||
const u_char *BX_skip_ctl_c_seq (const u_char *start, int *lhs, int *rhs, int proper);
|
const u_char *BX_skip_ctl_c_seq (const u_char *start, int *lhs, int *rhs, int proper);
|
||||||
|
|
||||||
@@ -904,7 +904,7 @@ static int altc = OFF;
|
|||||||
display_blink(blink);
|
display_blink(blink);
|
||||||
display_underline(undl);
|
display_underline(undl);
|
||||||
display_altcharset(altc);
|
display_altcharset(altc);
|
||||||
tputs_x(replace_color(-2, -2)); /* Reinstate color */
|
put_color(-2, -2); /* Reinstate color */
|
||||||
|
|
||||||
output_line(str);
|
output_line(str);
|
||||||
|
|
||||||
@@ -914,7 +914,7 @@ static int altc = OFF;
|
|||||||
blink = display_blink(OFF);
|
blink = display_blink(OFF);
|
||||||
altc = display_altcharset(OFF);
|
altc = display_altcharset(OFF);
|
||||||
#else
|
#else
|
||||||
tputs_x(replace_color(-2,-2));
|
put_color(-2,-2);
|
||||||
output_line(str);
|
output_line(str);
|
||||||
#endif
|
#endif
|
||||||
term_newline();
|
term_newline();
|
||||||
@@ -1348,7 +1348,7 @@ static int display_color (long color1, long color2)
|
|||||||
else
|
else
|
||||||
doing_color = 1;
|
doing_color = 1;
|
||||||
|
|
||||||
tputs_x(replace_color(color1, color2));
|
put_color(color1, color2);
|
||||||
return doing_color;
|
return doing_color;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2922,16 +2922,28 @@ unsigned char *BX_strip_ansi (const unsigned char *str)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Meant as an argument to strip_ansi(). This version will replace ANSI
|
* put_color()
|
||||||
* color changes with terminal specific color changes.
|
*
|
||||||
|
* Converts ^C color code pairs into terminal specific color changes,
|
||||||
|
* and sends them to the terminal.
|
||||||
|
*
|
||||||
|
* Code foreground background
|
||||||
|
* -----------------------------------------------------------
|
||||||
|
* 0 to 15 MIRC-style color codes MIRC-style color codes
|
||||||
|
* 30 to 37 term colors 0 to 7 (invalid)
|
||||||
|
* 40 to 37 (invalid) term colors 0 to 7
|
||||||
|
* 50 to 57 term colors 8 to 15 term colors 8 to 15
|
||||||
|
* 58 (invalid) blinking on
|
||||||
|
*
|
||||||
|
* Setting both foreground and background to -1 sets the terminal
|
||||||
|
* to "normal", and setting both to -2 re-applies the last set colors.
|
||||||
*/
|
*/
|
||||||
char *replace_color(int fore, int back)
|
void put_color(int fore, int back)
|
||||||
{
|
{
|
||||||
static char retbuf[512];
|
char retbuf[512];
|
||||||
char *ptr = retbuf;
|
|
||||||
static int last_fore = -2, last_back = -2;
|
static int last_fore = -2, last_back = -2;
|
||||||
|
|
||||||
static int fore_conv[] = {
|
const static int fore_conv[] = {
|
||||||
15, 0, 4, 2, 1, 3, 5, 9, /* 0-7 */
|
15, 0, 4, 2, 1, 3, 5, 9, /* 0-7 */
|
||||||
11, 10, 6, 14, 12, 13, 8, 7, /* 8-15 */
|
11, 10, 6, 14, 12, 13, 8, 7, /* 8-15 */
|
||||||
15, 0, 0, 0, 0, 0, 0, 0, /* 16-23 */
|
15, 0, 0, 0, 0, 0, 0, 0, /* 16-23 */
|
||||||
@@ -2941,7 +2953,7 @@ static char retbuf[512];
|
|||||||
0, 0, 8, 9, 10, 11, 12, 13, /* 48-55 */
|
0, 0, 8, 9, 10, 11, 12, 13, /* 48-55 */
|
||||||
14, 15 /* 56-57 */
|
14, 15 /* 56-57 */
|
||||||
};
|
};
|
||||||
static int back_conv[] = {
|
const static int back_conv[] = {
|
||||||
7, 0, 4, 2, 1, 3, 5, 1,
|
7, 0, 4, 2, 1, 3, 5, 1,
|
||||||
3, 2, 6, 6, 4, 5, 0, 0,
|
3, 2, 6, 6, 4, 5, 0, 0,
|
||||||
7, 0, 0, 0, 0, 0, 0, 0,
|
7, 0, 0, 0, 0, 0, 0, 0,
|
||||||
@@ -2952,10 +2964,8 @@ static char retbuf[512];
|
|||||||
14, 15
|
14, 15
|
||||||
};
|
};
|
||||||
|
|
||||||
*ptr = '\0';
|
|
||||||
|
|
||||||
if (!get_int_var(COLOR_VAR))
|
if (!get_int_var(COLOR_VAR))
|
||||||
return retbuf;
|
return;
|
||||||
|
|
||||||
if (fore == -2 && back == -2)
|
if (fore == -2 && back == -2)
|
||||||
{
|
{
|
||||||
@@ -2964,7 +2974,8 @@ static char retbuf[512];
|
|||||||
else if (fore == -1 && back == -1)
|
else if (fore == -1 && back == -1)
|
||||||
{
|
{
|
||||||
last_fore = last_back = -2;
|
last_fore = last_back = -2;
|
||||||
return (current_term->TI_sgrstrs[TERM_SGR_NORMAL-1]);
|
tputs_x(current_term->TI_sgrstrs[TERM_SGR_NORMAL-1]);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fore == -1)
|
if (fore == -1)
|
||||||
@@ -2972,9 +2983,10 @@ static char retbuf[512];
|
|||||||
if (back == -1)
|
if (back == -1)
|
||||||
back = last_back;
|
back = last_back;
|
||||||
|
|
||||||
|
retbuf[0] = '\0';
|
||||||
if (back == 58)
|
if (back == 58)
|
||||||
strcat(retbuf, current_term->TI_sgrstrs[TERM_SGR_BLINK_ON - 1]);
|
strcat(retbuf, current_term->TI_sgrstrs[TERM_SGR_BLINK_ON - 1]);
|
||||||
if (fore > -1)
|
if (fore > -1 && fore < 58)
|
||||||
strcat(retbuf, current_term->TI_forecolors[fore_conv[fore]]);
|
strcat(retbuf, current_term->TI_forecolors[fore_conv[fore]]);
|
||||||
if (back > -1 && back < 58)
|
if (back > -1 && back < 58)
|
||||||
strcat(retbuf, current_term->TI_backcolors[back_conv[back]]);
|
strcat(retbuf, current_term->TI_backcolors[back_conv[back]]);
|
||||||
@@ -2982,5 +2994,5 @@ static char retbuf[512];
|
|||||||
last_fore = fore;
|
last_fore = fore;
|
||||||
last_back = back;
|
last_back = back;
|
||||||
|
|
||||||
return retbuf;
|
tputs_x(retbuf);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user