Changeset 792 in openpam


Ignore:
Timestamp:
Mar 17, 2014, 2:11:41 PM (7 years ago)
Author:
Dag-Erling Smørgrav
Message:

Support line continuation in whitespace.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/libpam/openpam_readword.c

    r648 r792  
    6262
    6363        /* skip initial whitespace */
    64         comment = 0;
    65         while ((ch = getc(f)) != EOF && ch != '\n') {
    66                 if (ch == '#')
    67                         comment = 1;
    68                 if (!is_lws(ch) && !comment)
     64        comment = escape = quote = 0;
     65        while ((ch = getc(f)) != EOF) {
     66                if (ch == '\n') {
     67                        /* either EOL or line continuation */
     68                        if (!escape)
     69                                break;
     70                        if (lineno != NULL)
     71                                ++*lineno;
     72                        escape = 0;
     73                } else if (escape) {
     74                        /* escaped something else */
    6975                        break;
     76                } else if (ch == '#') {
     77                        /* comment: until EOL, no continuation */
     78                        while ((ch = getc(f)) != EOF)
     79                                if (ch == '\n')
     80                                        break;
     81                        break;
     82                } else if (ch == '\\') {
     83                        escape = 1;
     84                } else if (!is_ws(ch)) {
     85                        break;
     86                }
    7087        }
    7188        if (ch == EOF)
     
    7794        word = NULL;
    7895        size = len = 0;
    79         escape = quote = 0;
    8096        while ((ch = fgetc(f)) != EOF && (!is_ws(ch) || quote || escape)) {
    8197                if (ch == '\\' && !escape && quote != '\'') {
     
    91107                        /* end quote */
    92108                        quote = 0;
    93                 } else if (ch == '\n' && escape && quote != '\'') {
     109                } else if (ch == '\n' && escape) {
    94110                        /* line continuation */
    95111                        escape = 0;
Note: See TracChangeset for help on using the changeset viewer.