aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--FICS/comproc.c11
-rw-r--r--FICS/utils.c22
-rw-r--r--FICS/utils.h4
3 files changed, 20 insertions, 17 deletions
diff --git a/FICS/comproc.c b/FICS/comproc.c
index c778502..405a59f 100644
--- a/FICS/comproc.c
+++ b/FICS/comproc.c
@@ -845,8 +845,8 @@ who_terse(int p, int num, int *plist, int type)
}
if (p == p1) {
- psprintf_highlight(p, ptmp + strlen(ptmp), "%s",
- parray[p1].name);
+ psprintf_highlight(p, ptmp + strlen(ptmp),
+ sizeof ptmp - strlen(ptmp), "%s", parray[p1].name);
} else {
strlcat(ptmp, parray[p1].name, sizeof ptmp);
}
@@ -909,8 +909,8 @@ who_verbose(int p, int num, int plist[])
if (p == p1) {
strlcpy(tmp, " ", sizeof tmp);
- psprintf_highlight(p, tmp + strlen(tmp), "%-17s",
- p1WithAttrs);
+ psprintf_highlight(p, tmp + strlen(tmp),
+ sizeof tmp - strlen(tmp), "%-17s", p1WithAttrs);
} else {
ret = snprintf(tmp, sizeof tmp, " %-17s", p1WithAttrs);
@@ -968,7 +968,8 @@ who_winloss(int p, int num, int plist[])
p1WithAttrs[17] = '\0';
if (p1 == p) {
- psprintf_highlight(p, playerLine, "%-17s", p1WithAttrs);
+ psprintf_highlight(p, playerLine, sizeof playerLine,
+ "%-17s", p1WithAttrs);
} else {
snprintf(playerLine, sizeof playerLine, "%-17s",
p1WithAttrs);
diff --git a/FICS/utils.c b/FICS/utils.c
index e81781f..29fe60c 100644
--- a/FICS/utils.c
+++ b/FICS/utils.c
@@ -315,35 +315,37 @@ pprintf_highlight(int p, char *format, ...)
}
PRIVATE void
-sprintf_dohightlight(int p, char *s)
+sprintf_dohightlight(int p, char *s, size_t size)
{
if (parray[p].highlight & 0x01)
- strcat(s, "\033[7m");
+ strlcat(s, "\033[7m", size);
if (parray[p].highlight & 0x02)
- strcat(s, "\033[1m");
+ strlcat(s, "\033[1m", size);
if (parray[p].highlight & 0x04)
- strcat(s, "\033[4m");
+ strlcat(s, "\033[4m", size);
if (parray[p].highlight & 0x08)
- strcat(s, "\033[2m");
+ strlcat(s, "\033[2m", size);
}
PUBLIC int
-psprintf_highlight(int p, char *s, char *format, ...)
+psprintf_highlight(int p, char *s, size_t size, char *format, ...)
{
int retval;
va_list ap;
if (parray[p].highlight) {
- sprintf_dohightlight(p, s);
+ char tmp[1000] = { '\0' };
va_start(ap, format);
- retval = vsprintf(s + strlen(s), format, ap);
+ retval = vsnprintf(tmp, sizeof tmp, format, ap);
va_end(ap);
- strcat(s, "\033[0m");
+ sprintf_dohightlight(p, s, size);
+ strlcat(s, tmp, size);
+ strlcat(s, "\033[0m", size);
} else {
va_start(ap, format);
- retval = vsprintf(s, format, ap);
+ retval = vsnprintf(s, size, format, ap);
va_end(ap);
}
diff --git a/FICS/utils.h b/FICS/utils.h
index c6a673b..88f3cc9 100644
--- a/FICS/utils.h
+++ b/FICS/utils.h
@@ -96,8 +96,8 @@ extern int psend_command(int, char *, char *);
extern int psend_file(int, char *, char *);
extern int psend_logoutfile(int, char *, char *);
extern int psend_raw_file(int, char *, char *);
-extern int psprintf_highlight(int, char *, char *, ...)
- PRINTFLIKE(3);
+extern int psprintf_highlight(int, char *, size_t, char *, ...)
+ PRINTFLIKE(4);
extern int safechar(int);
extern int safestring(char *);
extern int search_directory(char *, char *, char **, int);