nginx-0.1.38-RELEASE import
*) Feature: the "limit_rate" directive is supported in in proxy and
FastCGI mode.
*) Feature: the "X-Accel-Limit-Rate" response header line is supported
in proxy and FastCGI mode.
*) Feature: the "break" directive.
*) Feature: the "log_not_found" directive.
*) Bugfix: the response status code was not changed when request was
redirected by the ""X-Accel-Redirect" header line.
*) Bugfix: the variables set by the "set" directive could not be used
in SSI.
*) Bugfix: the segmentation fault may occurred if the SSI page has more
than one remote subrequest.
*) Bugfix: nginx treated the backend response as invalid if the status
line in the header was transferred in two packets; the bug had
appeared in 0.1.29.
*) Feature: the "ssi_types" directive.
*) Feature: the "autoindex_exact_size" directive.
*) Bugfix: the ngx_http_autoindex_module did not support the long file
names in UTF-8.
*) Feature: the IMAP/POP3 proxy.
diff --git a/src/core/ngx_string.c b/src/core/ngx_string.c
index e21a9fc..575e60e 100644
--- a/src/core/ngx_string.c
+++ b/src/core/ngx_string.c
@@ -753,20 +753,62 @@
continue;
}
- if (c < 0xC0) {
- /* invalid utf */
- return utf->len;
+ if (c >= 0xc0) {
+ for (c <<= 1; c & 0x80; c <<= 1) {
+ i++;
+ }
+
+ continue;
}
- for (c <<= 1; c & 0x80; c <<= 1) {
- i++;
- }
+ /* invalid utf */
+
+ return utf->len;
}
return len;
}
+u_char *
+ngx_utf_cpystrn(u_char *dst, u_char *src, size_t n)
+{
+ u_char c;
+
+ if (n == 0) {
+ return dst;
+ }
+
+ for ( /* void */ ; --n; dst++, src++) {
+
+ c = *src;
+ *dst = c;
+
+ if (c < 0x80) {
+ if (*dst != '\0') {
+ continue;
+ }
+
+ return dst;
+ }
+
+ if (c >= 0xc0) {
+ for (c <<= 1; c & 0x80; c <<= 1) {
+ *++dst = *++src;
+ }
+
+ continue;
+ }
+
+ /* invalid utf */
+ }
+
+ *dst = '\0';
+
+ return dst;
+}
+
+
uintptr_t
ngx_escape_uri(u_char *dst, u_char *src, size_t size, ngx_uint_t type)
{