mirror of
https://github.com/nginx/nginx.git
synced 2025-01-02 20:26:59 -06:00
nginx-0.3.22-RELEASE import
*) Feature: the ngx_http_perl_module supports the $r->args and $r->unescape methods. *) Feature: the method $r->query_string of ngx_http_perl_module was canceled. *) Bugfix: segmentation fault was occurred if the "none" or "blocked" values was specified in the "valid_referers" directive; the bug had appeared in 0.3.18.
This commit is contained in:
parent
4a32307de7
commit
ae33d014ad
@ -20,9 +20,6 @@ CFLAGS="$CFLAGS -O"
|
||||
# inline any function, at the compiler's discretion
|
||||
CFLAGS="$CFLAGS -Ob2"
|
||||
|
||||
# single-file IP optimizations
|
||||
#IPO="-ip"
|
||||
|
||||
# multi-file IP optimizations
|
||||
case "$NGX_ICC_VER" in
|
||||
9.*)
|
||||
@ -34,6 +31,9 @@ case "$NGX_ICC_VER" in
|
||||
;;
|
||||
esac
|
||||
|
||||
# single-file IP optimizations
|
||||
#IPO="-ip"
|
||||
|
||||
CFLAGS="$CFLAGS $IPO"
|
||||
CORE_LINK="$CORE_LINK $IPO"
|
||||
CORE_LINK="$CORE_LINK -opt_report_file=$NGX_OBJS/opt_report_file"
|
||||
|
@ -15,14 +15,16 @@ $NGX_OBJS/src/http/modules/perl/blib/arch/auto/nginx/nginx.so: \
|
||||
cd $NGX_OBJS/src/http/modules/perl && make
|
||||
|
||||
|
||||
$NGX_OBJS/src/http/modules/perl/Makefile: src/http/modules/perl/Makefile.PL
|
||||
$NGX_OBJS/src/http/modules/perl/Makefile: \
|
||||
src/http/modules/perl/Makefile.PL \
|
||||
src/http/modules/perl/nginx.pm
|
||||
|
||||
cp -p src/http/modules/perl/nginx.* $NGX_OBJS/src/http/modules/perl/
|
||||
cp -p src/http/modules/perl/typemap $NGX_OBJS/src/http/modules/perl/
|
||||
cp -p src/http/modules/perl/Makefile.PL $NGX_OBJS/src/http/modules/perl/
|
||||
|
||||
cd $NGX_OBJS/src/http/modules/perl \
|
||||
&& NGX_PERL_CFLAGS="$NGX_PERL_CFLAGS" \
|
||||
&& NGX_PERL_CFLAGS="$NGX_PERL_CFLAGS $NGX_CC_OPT" \
|
||||
NGX_PCRE=$PCRE \
|
||||
NGX_ZLIB=$ZLIB \
|
||||
NGX_OBJS=$NGX_OBJS \
|
||||
|
@ -9,6 +9,42 @@
|
||||
<title lang="en">nginx changelog</title>
|
||||
|
||||
|
||||
<changes ver="0.3.22" date="17.01.2006">
|
||||
|
||||
<change type="feature">
|
||||
<para lang="ru">
|
||||
ÍÏÄÕÌØ ngx_http_perl_module ÐÏÄÄÅÒÖÉ×ÁÅÔ ÍÅÔÏÄÙ $r->args É $r->unescape.
|
||||
</para>
|
||||
<para lang="en">
|
||||
the ngx_http_perl_module supports the $r->args and $r->unescape methods.
|
||||
</para>
|
||||
</change>
|
||||
|
||||
<change type="feature">
|
||||
<para lang="ru">
|
||||
ÍÅÔÏÄ $r->query_string × ÍÏÄÕÌÅ ngx_http_perl_module ÕÐÒÁÚÄΣÎ.
|
||||
</para>
|
||||
<para lang="en">
|
||||
the method $r->query_string of ngx_http_perl_module is canceled.
|
||||
</para>
|
||||
</change>
|
||||
|
||||
<change type="bugfix">
|
||||
<para lang="ru">
|
||||
ÅÓÌÉ × ÄÉÒÅËÔÉ×Å valid_referers ÕËÁÚÁÎÙ ÔÏÌØËÏ none ÉÌÉ blocked, ÔÏ
|
||||
ÐÒÏÉÓÈÏÄÉÌ segmentation fault;
|
||||
ÏÛÉÂËÁ ÐÏÑ×ÉÌÁÓØ × 0.3.18.
|
||||
</para>
|
||||
<para lang="en">
|
||||
segmentation fault was occurred if the "none" or "blocked" values was
|
||||
specified in the "valid_referers" directive;
|
||||
bug appeared in 0.3.18.
|
||||
</para>
|
||||
</change>
|
||||
|
||||
</changes>
|
||||
|
||||
|
||||
<changes ver="0.3.21" date="16.01.2006">
|
||||
|
||||
<change type="feature">
|
||||
|
@ -168,6 +168,8 @@ ngx_module_t ngx_core_module = {
|
||||
|
||||
ngx_uint_t ngx_max_module;
|
||||
|
||||
static char *ngx_null_environ = NULL;
|
||||
|
||||
|
||||
int ngx_cdecl
|
||||
main(int argc, char *const *argv)
|
||||
@ -232,6 +234,8 @@ main(int argc, char *const *argv)
|
||||
return 1;
|
||||
}
|
||||
|
||||
environ = &ngx_null_environ;
|
||||
|
||||
ngx_max_module = 0;
|
||||
for (i = 0; ngx_modules[i]; i++) {
|
||||
ngx_modules[i]->index = ngx_max_module++;
|
||||
|
@ -8,7 +8,7 @@
|
||||
#define _NGINX_H_INCLUDED_
|
||||
|
||||
|
||||
#define NGINX_VER "nginx/0.3.21"
|
||||
#define NGINX_VER "nginx/0.3.22"
|
||||
|
||||
#define NGINX_VAR "NGINX"
|
||||
#define NGX_OLDPID_EXT ".oldbin"
|
||||
|
@ -931,7 +931,7 @@ ngx_escape_uri(u_char *dst, u_char *src, size_t size, ngx_uint_t type)
|
||||
|
||||
|
||||
void
|
||||
ngx_unescape_uri(u_char **dst, u_char **src, size_t size)
|
||||
ngx_unescape_uri(u_char **dst, u_char **src, size_t size, ngx_uint_t type)
|
||||
{
|
||||
u_char *d, *s, ch, c, decoded;
|
||||
enum {
|
||||
@ -952,7 +952,7 @@ ngx_unescape_uri(u_char **dst, u_char **src, size_t size)
|
||||
|
||||
switch (state) {
|
||||
case sw_usual:
|
||||
if (ch == '?') {
|
||||
if (ch == '?' && type == NGX_UNESCAPE_URI) {
|
||||
*d++ = ch;
|
||||
goto done;
|
||||
}
|
||||
@ -995,12 +995,18 @@ ngx_unescape_uri(u_char **dst, u_char **src, size_t size)
|
||||
if (ch >= '0' && ch <= '9') {
|
||||
ch = (u_char) ((decoded << 4) + ch - '0');
|
||||
|
||||
if (ch > '%' && ch < 0x7f) {
|
||||
*d++ = ch;
|
||||
if (type == NGX_UNESCAPE_URI) {
|
||||
if (ch > '%' && ch < 0x7f) {
|
||||
*d++ = ch;
|
||||
break;
|
||||
}
|
||||
|
||||
*d++ = '%'; *d++ = *(s - 2); *d++ = *(s - 1);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
*d++ = '%'; *d++ = *(s - 2); *d++ = *(s - 1);
|
||||
*d++ = ch;
|
||||
|
||||
break;
|
||||
}
|
||||
@ -1009,17 +1015,22 @@ ngx_unescape_uri(u_char **dst, u_char **src, size_t size)
|
||||
if (c >= 'a' && c <= 'f') {
|
||||
ch = (u_char) ((decoded << 4) + c - 'a' + 10);
|
||||
|
||||
if (ch == '?') {
|
||||
*d++ = ch;
|
||||
goto done;
|
||||
}
|
||||
if (type == NGX_UNESCAPE_URI) {
|
||||
if (ch == '?') {
|
||||
*d++ = ch;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (ch > '%' && ch < 0x7f) {
|
||||
*d++ = ch;
|
||||
if (ch > '%' && ch < 0x7f) {
|
||||
*d++ = ch;
|
||||
break;
|
||||
}
|
||||
|
||||
*d++ = '%'; *d++ = *(s - 2); *d++ = *(s - 1);
|
||||
break;
|
||||
}
|
||||
|
||||
*d++ = '%'; *d++ = *(s - 2); *d++ = *(s - 1);
|
||||
*d++ = ch;
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -144,13 +144,15 @@ size_t ngx_utf_length(ngx_str_t *utf);
|
||||
u_char * ngx_utf_cpystrn(u_char *dst, u_char *src, size_t n);
|
||||
|
||||
|
||||
#define NGX_ESCAPE_URI 0
|
||||
#define NGX_ESCAPE_ARGS 1
|
||||
#define NGX_ESCAPE_HTML 2
|
||||
#define NGX_ESCAPE_URI 0
|
||||
#define NGX_ESCAPE_ARGS 1
|
||||
#define NGX_ESCAPE_HTML 2
|
||||
|
||||
#define NGX_UNESCAPE_URI 1
|
||||
|
||||
uintptr_t ngx_escape_uri(u_char *dst, u_char *src, size_t size,
|
||||
ngx_uint_t type);
|
||||
void ngx_unescape_uri(u_char **dst, u_char **src, size_t size);
|
||||
void ngx_unescape_uri(u_char **dst, u_char **src, size_t size, ngx_uint_t type);
|
||||
|
||||
|
||||
#define ngx_qsort qsort
|
||||
|
@ -90,10 +90,7 @@ ngx_http_referer_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v,
|
||||
|
||||
rlcf = ngx_http_get_module_loc_conf(r, ngx_http_referer_module);
|
||||
|
||||
if (rlcf->hash.buckets == NULL
|
||||
&& rlcf->dns_wildcards == NULL
|
||||
&& rlcf->dns_wildcards->hash.buckets == NULL)
|
||||
{
|
||||
if (rlcf->hash.buckets == NULL && rlcf->dns_wildcards == NULL) {
|
||||
goto valid;
|
||||
}
|
||||
|
||||
@ -145,7 +142,7 @@ ngx_http_referer_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v,
|
||||
}
|
||||
}
|
||||
|
||||
if (rlcf->dns_wildcards && rlcf->dns_wildcards->hash.buckets) {
|
||||
if (rlcf->dns_wildcards) {
|
||||
uri = ngx_hash_find_wildcard(rlcf->dns_wildcards, buf, len);
|
||||
if (uri) {
|
||||
goto uri;
|
||||
|
@ -17,7 +17,7 @@ our @EXPORT = qw(
|
||||
HTTP_SERVER_ERROR
|
||||
);
|
||||
|
||||
our $VERSION = '0.3.21';
|
||||
our $VERSION = '0.3.22';
|
||||
|
||||
require XSLoader;
|
||||
XSLoader::load('nginx', $VERSION);
|
||||
@ -48,11 +48,6 @@ nginx - Perl interface to the nginx HTTP server API
|
||||
|
||||
This module provides a Perl interface to the nginx HTTP server API.
|
||||
|
||||
=head2 EXPORT
|
||||
|
||||
None by default.
|
||||
|
||||
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
|
@ -156,13 +156,13 @@ uri(r, ...)
|
||||
|
||||
|
||||
char *
|
||||
query_string(r, ...)
|
||||
args(r, ...)
|
||||
nginx r
|
||||
|
||||
CODE:
|
||||
|
||||
if (items != 1) {
|
||||
croak("$r->query_string(text) is not implemented");
|
||||
croak("$r->args(text) is not implemented");
|
||||
}
|
||||
|
||||
RETVAL = ngx_palloc(r->pool, r->args.len + 1);
|
||||
@ -360,6 +360,9 @@ print(r, ...)
|
||||
b->start = p;
|
||||
b->end = b->last;
|
||||
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
||||
"$r->print: read-only SV: %z", len);
|
||||
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
@ -374,12 +377,11 @@ print(r, ...)
|
||||
sv = SvRV(sv);
|
||||
}
|
||||
|
||||
ngx_log_debug3(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
||||
"SV: %p %d %Xd",
|
||||
sv, SvREFCNT(sv), SvREADONLY(sv));
|
||||
|
||||
(void) SvPV(sv, len);
|
||||
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
||||
"$r->print: copy SV: %z", len);
|
||||
|
||||
size += len;
|
||||
}
|
||||
|
||||
@ -513,6 +515,8 @@ rflush(r)
|
||||
|
||||
b->flush = 1;
|
||||
|
||||
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, "$r->rflush");
|
||||
|
||||
RETVAL = ngx_http_perl_output(r, b);
|
||||
|
||||
done:
|
||||
@ -549,3 +553,34 @@ internal_redirect(r, uri)
|
||||
XSRETURN_EMPTY;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
unescape(r, text, type = 0)
|
||||
nginx r
|
||||
SV *text
|
||||
int type
|
||||
|
||||
PREINIT:
|
||||
|
||||
u_char *p, *dst, *src;
|
||||
STRLEN n;
|
||||
|
||||
CODE:
|
||||
|
||||
src = (u_char *) SvPV(text, n);
|
||||
|
||||
p = ngx_palloc(r->pool, n + 1);
|
||||
if (p == NULL) {
|
||||
XSRETURN_UNDEF;
|
||||
}
|
||||
|
||||
dst = p;
|
||||
|
||||
ngx_unescape_uri(&dst, &src, n, (ngx_uint_t) type);
|
||||
*dst = '\0';
|
||||
|
||||
RETVAL = (char *) p;
|
||||
|
||||
OUTPUT:
|
||||
RETVAL
|
||||
|
@ -682,7 +682,7 @@ ngx_http_script_regex_end_code(ngx_http_script_engine_t *e)
|
||||
dst = e->buf.data;
|
||||
src = e->buf.data;
|
||||
|
||||
ngx_unescape_uri(&dst, &src, e->pos - e->buf.data);
|
||||
ngx_unescape_uri(&dst, &src, e->pos - e->buf.data, NGX_UNESCAPE_URI);
|
||||
|
||||
if (src < e->pos) {
|
||||
dst = ngx_copy(dst, src, e->pos - src);
|
||||
|
@ -97,9 +97,11 @@ pid_t rfork_thread(int flags, void *stack, int (*func)(void *arg), void *arg);
|
||||
#endif
|
||||
|
||||
|
||||
extern char *malloc_options;
|
||||
|
||||
#define NGX_HAVE_OS_SPECIFIC_INIT 1
|
||||
|
||||
|
||||
extern char **environ;
|
||||
extern char *malloc_options;
|
||||
|
||||
|
||||
#endif /* _NGX_FREEBSD_CONFIG_H_INCLUDED_ */
|
||||
|
@ -101,4 +101,7 @@ extern ssize_t sendfile(int s, int fd, int32_t *offset, size_t size);
|
||||
#define NGX_HAVE_OS_SPECIFIC_INIT 1
|
||||
|
||||
|
||||
extern char **environ;
|
||||
|
||||
|
||||
#endif /* _NGX_LINUX_CONFIG_H_INCLUDED_ */
|
||||
|
@ -102,4 +102,7 @@
|
||||
#endif
|
||||
|
||||
|
||||
extern char **environ;
|
||||
|
||||
|
||||
#endif /* _NGX_POSIX_CONFIG_H_INCLUDED_ */
|
||||
|
@ -88,4 +88,7 @@
|
||||
#define NGX_HAVE_OS_SPECIFIC_INIT 1
|
||||
|
||||
|
||||
extern char **environ;
|
||||
|
||||
|
||||
#endif /* _NGX_SOLARIS_CONFIG_H_INCLUDED_ */
|
||||
|
Loading…
Reference in New Issue
Block a user