More futureproofing hypotheticals

If you set COLNO larger than BUFSZ, few places cause a buffer overrun.
Add a new buffer size definition, COLBUFSZ, which is the larger of
COLNO and BUFSZ, used in places that care about a screen-wide string.
This commit is contained in:
Pasi Kallinen
2020-12-20 12:23:09 +02:00
parent 4cf6727b4e
commit 957990c14d
4 changed files with 10 additions and 3 deletions

View File

@@ -370,6 +370,13 @@ struct savefile_info {
#define TBUFSZ 300 /* g.toplines[] buffer max msg: 3 81char names */
/* plus longest prefix plus a few extra words */
/* COLBUFSZ is the larger of BUFSZ and COLNO */
#if BUFSZ > COLNO
#define COLBUFSZ BUFSZ
#else
#define COLBUFSZ COLNO
#endif
#define PL_NSIZ 32 /* name of player, ghost, shopkeeper */
#define PL_CSIZ 32 /* sizeof pl_character */
#define PL_FSIZ 32 /* fruit name */

View File

@@ -1330,7 +1330,7 @@ wiz_map_levltyp(VOID_ARGS)
}
{
char dsc[BUFSZ];
char dsc[COLBUFSZ];
s_level *slev = Is_special(&u.uz);
Sprintf(dsc, "D:%d,L:%d", u.uz.dnum, u.uz.dlevel);

View File

@@ -1988,7 +1988,7 @@ dump_map()
int x, y, glyph, skippedrows, lastnonblank;
int subset = TER_MAP | TER_TRP | TER_OBJ | TER_MON;
int default_glyph = cmap_to_glyph(g.level.flags.arboreal ? S_tree : S_stone);
char buf[BUFSZ];
char buf[COLBUFSZ];
boolean blankrow, toprow;
/*

View File

@@ -8307,7 +8307,7 @@ const char *str;
char *s;
if (!buf)
*(buf = (char *) alloc(BUFSZ)) = '\0';
*(buf = (char *) alloc(COLBUFSZ)) = '\0';
if (!*str) {
s = eos(buf);