Mercurial > hg > nginx-quic
comparison src/http/modules/ngx_http_ssi_filter_module.c @ 651:39b7d7b33c91 release-0.3.47
nginx-0.3.47-RELEASE import
*) Feature: the "upstream" directive.
*) Change: now the "\" escape symbol in the "\"" and "\'" pairs in the
SSI command is always removed.
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 23 May 2006 14:54:58 +0000 |
parents | 4946078f0a79 |
children | 400711951595 |
comparison
equal
deleted
inserted
replaced
650:d865681780b6 | 651:39b7d7b33c91 |
---|---|
1222 break; | 1222 break; |
1223 | 1223 |
1224 case ssi_quoted_symbol_state: | 1224 case ssi_quoted_symbol_state: |
1225 state = ctx->saved_state; | 1225 state = ctx->saved_state; |
1226 | 1226 |
1227 if (ch == '\\') { | |
1228 break; | |
1229 } | |
1230 | |
1231 if (ch == '"' && state == ssi_double_quoted_value_state) { | |
1232 ctx->param->value.data[ctx->param->value.len - 1] = ch; | |
1233 break; | |
1234 } | |
1235 | |
1236 if (ch == '\'' && state == ssi_quoted_value_state) { | |
1237 ctx->param->value.data[ctx->param->value.len - 1] = ch; | |
1238 break; | |
1239 } | |
1240 | |
1241 if (ctx->param->value.len == ctx->value_len) { | |
1242 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, | |
1243 "too long \"%V%c...\" value of \"%V\" " | |
1244 "parameter in \"%V\" SSI command", | |
1245 &ctx->param->value, ch, &ctx->param->key, | |
1246 &ctx->command); | |
1247 state = ssi_error_state; | |
1248 break; | |
1249 } | |
1250 | |
1251 ctx->param->value.data[ctx->param->value.len++] = ch; | 1227 ctx->param->value.data[ctx->param->value.len++] = ch; |
1252 | 1228 |
1253 break; | 1229 break; |
1254 | 1230 |
1255 case ssi_postparam_state: | 1231 case ssi_postparam_state: |
1256 | 1232 |
1257 if (ctx->param->value.len < ctx->value_len / 2) { | 1233 if (ctx->param->value.len + 1 < ctx->value_len / 2) { |
1258 value = ngx_palloc(r->pool, ctx->param->value.len); | 1234 value = ngx_palloc(r->pool, ctx->param->value.len + 1); |
1259 if (value == NULL) { | 1235 if (value == NULL) { |
1260 return NGX_ERROR; | 1236 return NGX_ERROR; |
1261 } | 1237 } |
1262 | 1238 |
1263 ngx_memcpy(value, ctx->param->value.data, | 1239 ngx_memcpy(value, ctx->param->value.data, |
1431 { | 1407 { |
1432 u_char ch, *p, **value, *data, *part_data; | 1408 u_char ch, *p, **value, *data, *part_data; |
1433 size_t *size, len, prefix, part_len; | 1409 size_t *size, len, prefix, part_len; |
1434 ngx_str_t var, *val; | 1410 ngx_str_t var, *val; |
1435 ngx_int_t key; | 1411 ngx_int_t key; |
1436 ngx_uint_t i, j, n, bracket; | 1412 ngx_uint_t i, j, n, bracket, quoted; |
1437 ngx_array_t lengths, values; | 1413 ngx_array_t lengths, values; |
1438 ngx_http_variable_value_t *vv; | 1414 ngx_http_variable_value_t *vv; |
1439 | 1415 |
1440 n = ngx_http_script_variables_count(text); | 1416 n = ngx_http_script_variables_count(text); |
1441 | 1417 |
1565 part_len = val->len; | 1541 part_len = val->len; |
1566 } | 1542 } |
1567 | 1543 |
1568 } else { | 1544 } else { |
1569 part_data = &text->data[i]; | 1545 part_data = &text->data[i]; |
1546 quoted = 0; | |
1570 | 1547 |
1571 for (p = part_data; i < text->len; i++) { | 1548 for (p = part_data; i < text->len; i++) { |
1572 ch = text->data[i]; | 1549 ch = text->data[i]; |
1573 | 1550 |
1574 if (ch == '$') { | 1551 if (!quoted) { |
1575 if (text->data[i - 1] != '\\') { | 1552 |
1553 if (ch == '\\') { | |
1554 quoted = 1; | |
1555 continue; | |
1556 } | |
1557 | |
1558 if (ch == '$') { | |
1576 break; | 1559 break; |
1577 } | 1560 } |
1578 | 1561 |
1579 *(p - 1) = ch; | 1562 } else { |
1580 | 1563 quoted = 0; |
1581 continue; | 1564 |
1565 if (ch != '\\' && ch != '\'' && ch != '"' && ch != '$') { | |
1566 *p++ = '\\'; | |
1567 } | |
1582 } | 1568 } |
1583 | 1569 |
1584 *p++ = ch; | 1570 *p++ = ch; |
1585 } | 1571 } |
1586 | 1572 |
2014 } else { | 2000 } else { |
2015 noregex = 1; | 2001 noregex = 1; |
2016 flags = 0; | 2002 flags = 0; |
2017 | 2003 |
2018 if (p < last - 1 && p[0] == '\\' && p[1] == '/') { | 2004 if (p < last - 1 && p[0] == '\\' && p[1] == '/') { |
2019 p++; | 2005 p++; |
2020 } | 2006 } |
2021 } | 2007 } |
2022 | 2008 |
2023 right.len = last - p; | 2009 right.len = last - p; |
2024 right.data = p; | 2010 right.data = p; |