From f55078bdc784015ea8c7ee498210fe898671b545 Mon Sep 17 00:00:00 2001 From: Aaron Jones Date: Sat, 14 May 2016 23:58:07 +0000 Subject: [PATCH] ircd_lexer: fix crash with very large config option strings --- src/ircd_lexer.l | 4 ++-- src/s_conf.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ircd_lexer.l b/src/ircd_lexer.l index 77cd44cc..c30b17ca 100644 --- a/src/ircd_lexer.l +++ b/src/ircd_lexer.l @@ -62,7 +62,7 @@ char *current_file = conffilebuf; FILE *inc_fbfile_in[MAX_INCLUDE_DEPTH]; -char linebuf[512]; +char yy_linebuf[16384]; #undef YY_INPUT @@ -83,7 +83,7 @@ include \.include{ws}(\<.*\>|\".*\") %% {include} { cinclude(); } "/*" { ccomment(); } -\n.* { strcpy(linebuf, yytext+1); lineno++; yyless(1); } +\n.* { rb_strlcpy(yy_linebuf, yytext+1, sizeof(yy_linebuf)); lineno++; yyless(1); } {ws} ; {comment} { hashcomment(); } diff --git a/src/s_conf.c b/src/s_conf.c index d6da365d..3b432c50 100644 --- a/src/s_conf.c +++ b/src/s_conf.c @@ -58,7 +58,7 @@ struct config_server_hide ConfigServerHide; extern int yyparse(void); /* defined in y.tab.c */ -extern char linebuf[]; +extern char yy_linebuf[16384]; /* defined in ircd_lexer.l */ #ifndef INADDR_NONE #define INADDR_NONE ((unsigned int) 0xffffffff) @@ -1647,7 +1647,7 @@ yyerror(const char *msg) { char newlinebuf[BUFSIZE]; - strip_tabs(newlinebuf, linebuf, strlen(linebuf)); + strip_tabs(newlinebuf, yy_linebuf, strlen(yy_linebuf)); ierror("\"%s\", line %d: %s at '%s'", conffilebuf, lineno + 1, msg, newlinebuf); sendto_realops_snomask(SNO_GENERAL, L_ALL, "\"%s\", line %d: %s at '%s'",