annotate docs/xsls/changes.xsls @ 9286:d9fe808c1841 default tip

HTTP/3: protection from recursion during connection reuse. When draining a connection associated with an HTTP/3 stream, calling ngx_http_v3_send_cancel_stream() might result in an attempt to obtain a connection for the decoder stream. This in turn will trigger draining of the very same connection. Depending on the client settings, this might either lead to stack overflow or will end up in decoder stream creation error and destroying the connection at some point, potentially resulting in use-after-free on stack. Fix is to make sure that connection reuse is disabled in ngx_http_v3_reset_stream(), so the recursion in question won't happen regardless of what called functions do.
author Maxim Dounin <mdounin@mdounin.ru>
date Sun, 02 Jun 2024 23:51:55 +0300
parents e79c7521aaf4
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
450
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1 X:stylesheet {
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2
4028
76bc29f06168 CHANGES conversion from KOI8-R to UTF-8.
Igor Sysoev <igor@sysoev.ru>
parents: 4025
diff changeset
3 X:output method="text";
450
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
5 X:param lang="'en'";
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6 X:param configuration="'../xml/change_log_conf.xml'";
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 X:var conf = "document($configuration)/configuration";
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 X:var start = "$conf/start";
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10 X:var indent = "$conf/indent";
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11 X:var max = "$conf/length";
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12 X:var br = {&lt;br&gt;}
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15 X:template = "/" { !! "change_log"; }
9215
e79c7521aaf4 Free nginx: support for sections in CHANGES.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6914
diff changeset
16 X:template = "change_log" { !! "section"; }
e79c7521aaf4 Free nginx: support for sections in CHANGES.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6914
diff changeset
17 X:template = "section" { !! "changes"; }
450
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
18
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
19
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
20 X:template = "changes" {
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
21 X:text {&#10;}
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
22
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
23 !{substring(concat($conf/changes[@lang=$lang]/title,
9215
e79c7521aaf4 Free nginx: support for sections in CHANGES.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6914
diff changeset
24 ../@title,
450
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
25 ' ', @ver,
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
26 ' '),
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
27 1, $conf/changes[@lang=$lang]/length)}
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
28
6914
529f10f7757c Docs: changes.xml dates converted to ISO 8601 format.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4028
diff changeset
29 X:if "$lang='ru'" {
529f10f7757c Docs: changes.xml dates converted to ISO 8601 format.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4028
diff changeset
30 !{substring(@date, 9, 2)}
529f10f7757c Docs: changes.xml dates converted to ISO 8601 format.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4028
diff changeset
31 X:text {.}
529f10f7757c Docs: changes.xml dates converted to ISO 8601 format.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4028
diff changeset
32 !{substring(@date, 6, 2)}
529f10f7757c Docs: changes.xml dates converted to ISO 8601 format.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4028
diff changeset
33 X:text {.}
529f10f7757c Docs: changes.xml dates converted to ISO 8601 format.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4028
diff changeset
34 !{substring(@date, 1, 4)}
529f10f7757c Docs: changes.xml dates converted to ISO 8601 format.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4028
diff changeset
35 }
450
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
36
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
37 X:if "$lang='en'" {
6914
529f10f7757c Docs: changes.xml dates converted to ISO 8601 format.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4028
diff changeset
38 !{substring(@date, 9, 2)}
450
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
39 !{$conf/changes[@lang=$lang]/month[number(substring(current()/@date,
6914
529f10f7757c Docs: changes.xml dates converted to ISO 8601 format.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4028
diff changeset
40 6, 2))]}
529f10f7757c Docs: changes.xml dates converted to ISO 8601 format.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4028
diff changeset
41 !{substring(@date, 1, 4)}
450
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
42 }
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
43
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
44 X:text {&#10;}
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
45
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
46 !! "change";
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
47
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
48 X:text {&#10;}
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
49 }
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
50
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
51
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
52 X:template = "change" {
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
53 X:var prefix = "$conf/changes[@lang=$lang]/*[local-name(.)=current()/@type]"
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
54
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
55 X:var postfix = { X:if "$prefix" { X:text {: } } }
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
56
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
57 !! "para[@lang=$lang]" (prefix = "concat($start, $prefix, $postfix)");
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
58 }
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
59
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
60
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
61 X:template para(prefix) = "para" {
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
62 X:var text = { !!; }
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
63
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
64 X:text {&#10;}
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
65
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
66 !wrap(text = "normalize-space($text)",
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
67 prefix = { X:if "position() = 1" { !{$prefix} } else { !{$indent} } })
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
68 }
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
69
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
70
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
71 X:template wrap(text, prefix) {
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
72 X:if "$text" {
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
73 X:var offset = {
4022
10b3b7908efb - support <br/> in the middle of input
Ruslan Ermilov <ru@nginx.com>
parents: 450
diff changeset
74 X:choose {
10b3b7908efb - support <br/> in the middle of input
Ruslan Ermilov <ru@nginx.com>
parents: 450
diff changeset
75 X:when "starts-with($text, concat($br, ' '))" {
10b3b7908efb - support <br/> in the middle of input
Ruslan Ermilov <ru@nginx.com>
parents: 450
diff changeset
76 !{string-length($br) + 2}
10b3b7908efb - support <br/> in the middle of input
Ruslan Ermilov <ru@nginx.com>
parents: 450
diff changeset
77 }
10b3b7908efb - support <br/> in the middle of input
Ruslan Ermilov <ru@nginx.com>
parents: 450
diff changeset
78 X:when "starts-with($text, $br)" {
10b3b7908efb - support <br/> in the middle of input
Ruslan Ermilov <ru@nginx.com>
parents: 450
diff changeset
79 !{string-length($br) + 1}
10b3b7908efb - support <br/> in the middle of input
Ruslan Ermilov <ru@nginx.com>
parents: 450
diff changeset
80 }
10b3b7908efb - support <br/> in the middle of input
Ruslan Ermilov <ru@nginx.com>
parents: 450
diff changeset
81 X:otherwise {
10b3b7908efb - support <br/> in the middle of input
Ruslan Ermilov <ru@nginx.com>
parents: 450
diff changeset
82 1
10b3b7908efb - support <br/> in the middle of input
Ruslan Ermilov <ru@nginx.com>
parents: 450
diff changeset
83 }
450
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
84 }
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
85 }
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
86
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
87 X:var length = {
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
88 !length(text = "substring($text, $offset)",
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
89 prefix = "string-length($prefix)",
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
90 length = "$max")
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
91 }
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
92
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
93 !{$prefix}
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
94
4025
7b85e695600a Traling spaces removal in text CHANGES files.
Igor Sysoev <igor@sysoev.ru>
parents: 4022
diff changeset
95 !{normalize-space(translate(substring($text, $offset, $length),
7b85e695600a Traling spaces removal in text CHANGES files.
Igor Sysoev <igor@sysoev.ru>
parents: 4022
diff changeset
96 '&#xA0;', ' '))}
450
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
97
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
98 X:text {&#10;}
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
99
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
100 !wrap(text = "substring($text, $length + $offset)", prefix = "$indent")
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
101 }
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
102 }
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
103
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
104
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
105 X:template length(text, prefix, length) {
4022
10b3b7908efb - support <br/> in the middle of input
Ruslan Ermilov <ru@nginx.com>
parents: 450
diff changeset
106 X:var break = "substring-before(substring($text, 1,
10b3b7908efb - support <br/> in the middle of input
Ruslan Ermilov <ru@nginx.com>
parents: 450
diff changeset
107 $length - $prefix + string-length($br)),
450
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
108 $br)"
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
109
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
110 X:choose {
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
111 X:when "$break" { !{string-length($break)} }
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
112
4022
10b3b7908efb - support <br/> in the middle of input
Ruslan Ermilov <ru@nginx.com>
parents: 450
diff changeset
113 X:when "$length = 0" { !{$max - $prefix} }
450
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
114
4022
10b3b7908efb - support <br/> in the middle of input
Ruslan Ermilov <ru@nginx.com>
parents: 450
diff changeset
115 X:when "string-length($text) + $prefix &lt;= $length" {
450
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
116 !{$length - $prefix}
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
117 }
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
118
4022
10b3b7908efb - support <br/> in the middle of input
Ruslan Ermilov <ru@nginx.com>
parents: 450
diff changeset
119 X:when "substring($text, $length - $prefix + 1, 1) = ' '" {
10b3b7908efb - support <br/> in the middle of input
Ruslan Ermilov <ru@nginx.com>
parents: 450
diff changeset
120 !{$length - $prefix + 1}
10b3b7908efb - support <br/> in the middle of input
Ruslan Ermilov <ru@nginx.com>
parents: 450
diff changeset
121 }
10b3b7908efb - support <br/> in the middle of input
Ruslan Ermilov <ru@nginx.com>
parents: 450
diff changeset
122
450
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
123 X:otherwise {
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
124 !length(text = "$text", prefix = "$prefix", length = "$length - 1")
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
125 }
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
126 }
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
127 }
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
128
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
129
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
130 X:template = "at" {@}
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
131 X:template = "br" { !{$br} }
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
132 X:template = "nobr" { !{translate(., ' ', '&#xA0;')} }
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
133
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
134
551102312e19 nginx-0.1.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
135 }