@@ -24,7 +24,7 @@ use Test::Nginx;
24
24
select STDERR ; $| = 1;
25
25
select STDOUT ; $| = 1;
26
26
27
- my $t = Test::Nginx-> new()-> has(qw/ http secure_link rewrite/ )-> plan(10 );
27
+ my $t = Test::Nginx-> new()-> has(qw/ http secure_link rewrite/ )-> plan(19 );
28
28
29
29
$t -> write_file_expand(' nginx.conf' , <<'EOF' );
30
30
@@ -111,6 +111,10 @@ http {
111
111
return 403;
112
112
}
113
113
}
114
+
115
+ location /stub {
116
+ return 200 x$secure_link${secure_link_expires}x;
117
+ }
114
118
}
115
119
}
116
120
@@ -128,6 +132,22 @@ like(http_get('/test.html?hash=q-5vpkjBkRXXtkUMXiJVHA=='),
128
132
qr / PASSED/ , ' request md5' );
129
133
like(http_get(' /test.html?hash=q-5vpkjBkRXXtkUMXiJVHA' ),
130
134
qr / PASSED/ , ' request md5 no padding' );
135
+
136
+ TODO: {
137
+ todo_skip ' stack-buffer-overflow' , 1 unless $ENV {TEST_NGINX_UNSAFE }
138
+ or $t -> has_version(' 1.13.5' );
139
+
140
+ like(http_get(' /test.html?hash=q-5vpkjBkRXXtkUMXiJVHAQQ' ),
141
+ qr / ^HTTP.*403/ , ' request md5 too long' );
142
+
143
+ }
144
+
145
+ like(http_get(' /test.html?hash=q-5vpkjBkRXXtkUMXiJVHA-TOOLONG' ),
146
+ qr / ^HTTP.*403/ , ' request md5 too long encoding' );
147
+ like(http_get(' /test.html?hash=BADHASHLENGTH' ),
148
+ qr / ^HTTP.*403/ , ' request md5 decode error' );
149
+ like(http_get(' /test.html?hash=q-5vpkjBkRXXtkUMXiJVHX==' ),
150
+ qr / ^HTTP.*403/ , ' request md5 mismatch' );
131
151
like(http_get(' /test.html' ), qr / ^HTTP.*403/ , ' request no hash' );
132
152
133
153
# new style with expires
@@ -146,15 +166,27 @@ $hash = encode_base64url(md5("secret/expires.html$expires"));
146
166
like(http_get(' /expires.html?hash=' . $hash . ' &expires=' . $expires ),
147
167
qr / ^HTTP.*403/ , ' request md5 expired' );
148
168
169
+ $expires = 0;
170
+ $hash = encode_base64url(md5(" secret/expires.html$expires " ));
171
+ like(http_get(' /expires.html?hash=' . $hash . ' &expires=' . $expires ),
172
+ qr / ^HTTP.*403/ , ' request md5 invalid expiration' );
173
+
149
174
# old style
150
175
151
176
like(http_get(' /p/' . md5_hex(' test.html' . ' secret' ) . ' /test.html' ),
152
177
qr / PASSED/ , ' request old style' );
153
178
like(http_get(' /p/' . md5_hex(' fake' ) . ' /test.html' ), qr / ^HTTP.*403/ ,
154
179
' request old style fake hash' );
180
+ like(http_get(' /p/' . ' foo' . ' /test.html' ), qr / ^HTTP.*403/ ,
181
+ ' request old style short hash' );
182
+ like(http_get(' /p/' . ' x' x 32 . ' /test.html' ), qr / ^HTTP.*403/ ,
183
+ ' request old style corrupt hash' );
184
+ like(http_get(' /p%2f' ), qr / ^HTTP.*403/ , ' request old style bad uri' );
155
185
like(http_get(' /p/test.html' ), qr / ^HTTP.*403/ , ' request old style no hash' );
156
186
like(http_get(' /inheritance/test' ), qr / PASSED/ , ' inheritance' );
157
187
188
+ like(http_get(' /stub' ), qr / xx/ , ' secure_link not found' );
189
+
158
190
# ##############################################################################
159
191
160
192
sub encode_base64url {
0 commit comments