From 589f3a3e3595f66974fe27fd81527197c28ea537 Mon Sep 17 00:00:00 2001 From: ceriel Date: Thu, 3 Jan 1991 13:50:57 +0000 Subject: [PATCH] Check for garbage in #pragma and #include --- lang/cem/cpp.ansi/domacro.c | 4 +++- lang/cem/cpp.ansi/preprocess.c | 30 ++++++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/lang/cem/cpp.ansi/domacro.c b/lang/cem/cpp.ansi/domacro.c index 2dd3170e1..0dcedd468 100644 --- a/lang/cem/cpp.ansi/domacro.c +++ b/lang/cem/cpp.ansi/domacro.c @@ -312,7 +312,9 @@ do_include() filenm = (char *)0; } AccFileSpecifier = 0; - SkipToNewLine(); + if (SkipToNewLine()) { + error("bad include syntax"); + } inctable[0] = WorkingDir; if (filenm) { if (!InsertFile(filenm, &inctable[tok==FILESPECIFIER],&result)){ diff --git a/lang/cem/cpp.ansi/preprocess.c b/lang/cem/cpp.ansi/preprocess.c index 98796a339..f8b7063a1 100644 --- a/lang/cem/cpp.ansi/preprocess.c +++ b/lang/cem/cpp.ansi/preprocess.c @@ -49,12 +49,35 @@ do_pragma() char *cur_line = Malloc(size); register char *c_ptr = cur_line; register int c = GetChar(); + register int delim = 0; - *c_ptr = '\0'; while(c != '\n') { if (c_ptr + 1 - cur_line == size) { - cur_line = Realloc(cur_line, (unsigned)(size += ITEXTSIZE)); + cur_line = Realloc(cur_line, (unsigned)(size + ITEXTSIZE)); c_ptr = cur_line + size - 1; + size += ITEXTSIZE; + } + if (delim) { + if (c == delim) { + delim = 0; + } + else if (c == '\\') { + *c_ptr++ = c; + c = GetChar(); + if (c == '\n') break; + } + } + else if (c == '\'' || c == '"') { + delim = c; + } + else if (c == '/') { + if ((c = GetChar()) != '*' || InputLevel) { + *c_ptr++ = '/'; + } + else { + skipcomment(); + continue; + } } *c_ptr++ = c; c = GetChar(); @@ -66,6 +89,9 @@ do_pragma() pragma_tab = (struct prag_info *)Realloc((char *)pragma_tab , (unsigned)(sizeof(struct prag_info) * (pragma_nr+1))); } + if (delim) { + error("unclosed opening %c", delim); + } pragma_tab[pragma_nr].pr_linnr = LineNumber; pragma_tab[pragma_nr].pr_fil = FileName; pragma_tab[pragma_nr].pr_text = cur_line; -- 2.34.1