diff options
author | Michael Meskes <meskes@postgresql.org> | 2013-07-05 11:07:16 +0200 |
---|---|---|
committer | Michael Meskes <meskes@postgresql.org> | 2013-07-05 11:15:19 +0200 |
commit | 2bb2a29c714293ba520d4332533ee62b7d774b28 (patch) | |
tree | f2431c6e0abb20c6dc7553b2a51b4ec312c9fe77 /src | |
parent | 8455b70fee2ddaabb5f76ed3aef11c97cbd10507 (diff) | |
download | postgresql-2bb2a29c714293ba520d4332533ee62b7d774b28.tar.gz postgresql-2bb2a29c714293ba520d4332533ee62b7d774b28.zip |
Applied patch by MauMau <maumau307@gmail.com> to escape filenames in #line statements.
Diffstat (limited to 'src')
-rw-r--r-- | src/interfaces/ecpg/preproc/output.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/interfaces/ecpg/preproc/output.c b/src/interfaces/ecpg/preproc/output.c index 9958a0a5dfe..7e375aafafb 100644 --- a/src/interfaces/ecpg/preproc/output.c +++ b/src/interfaces/ecpg/preproc/output.c @@ -95,9 +95,22 @@ hashline_number(void) #endif ) { - char *line = mm_alloc(strlen("\n#line %d \"%s\"\n") + sizeof(int) * CHAR_BIT * 10 / 3 + strlen(input_filename)); - - sprintf(line, "\n#line %d \"%s\"\n", yylineno, input_filename); + /* "* 2" here is for escaping \s below */ + char *line = mm_alloc(strlen("\n#line %d \"%s\"\n") + sizeof(int) * CHAR_BIT * 10 / 3 + strlen(input_filename) * 2); + char *src, + *dest; + + sprintf(line, "\n#line %d \"", yylineno); + src = input_filename; + dest = line + strlen(line); + while (*src) + { + if (*src == '\\') + *dest++ = '\\'; + *dest++ = *src++; + } + *dest = '\0'; + strcat(dest, "\"\n"); return line; } |