Re: [PATCH] Fix ngx_max_sockets variable, set actual value after use setrlimit(RLIMIT_NOFILE)

2019-10-24 Thread Maxim Dounin
Hello!

On Thu, Oct 24, 2019 at 01:38:38PM +, i...@morfi.ru wrote:

> # HG changeset patch
> # User Andrey Kolyshkin 
> # Date 1571924112 -10800
> #  Thu Oct 24 16:35:12 2019 +0300
> # Node ID dfae615e676214a83b91abfbb51c334cfb1ecfdd
> # Parent  89adf49fe76ada86d84e2af8f5cee9ca8c3dca19
> Fix ngx_max_sockets variable, set actual value after use 
> setrlimit(RLIMIT_NOFILE)
> 
> diff -r 89adf49fe76a -r dfae615e6762 src/os/unix/ngx_process_cycle.c
> --- a/src/os/unix/ngx_process_cycle.c Mon Oct 21 20:22:30 2019 +0300
> +++ b/src/os/unix/ngx_process_cycle.c Thu Oct 24 16:35:12 2019 +0300
> @@ -811,6 +811,8 @@
>  ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
>"setrlimit(RLIMIT_NOFILE, %i) failed",
>ccf->rlimit_nofile);
> +} else {
> +ngx_max_sockets = ccf->rlimit_nofile;
>  }
>  }
>  

I'm not what the intended semantics of the ngx_max_sockets 
variable is, but given that it is not used - I don't think it 
matters, and the existing semantics of being rlimit_nofile at the 
time of nginx start is good enough.

On the other hand, the change suggested breaks any possible 
intended semantics, as successful setrlimit() does not mean that 
the specified limit was actually applied.

-- 
Maxim Dounin
http://mdounin.ru/
___
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel


[PATCH] Fix ngx_max_sockets variable, set actual value after use setrlimit(RLIMIT_NOFILE)

2019-10-24 Thread i
# HG changeset patch
# User Andrey Kolyshkin 
# Date 1571924112 -10800
#  Thu Oct 24 16:35:12 2019 +0300
# Node ID dfae615e676214a83b91abfbb51c334cfb1ecfdd
# Parent  89adf49fe76ada86d84e2af8f5cee9ca8c3dca19
Fix ngx_max_sockets variable, set actual value after use 
setrlimit(RLIMIT_NOFILE)

diff -r 89adf49fe76a -r dfae615e6762 src/os/unix/ngx_process_cycle.c
--- a/src/os/unix/ngx_process_cycle.c   Mon Oct 21 20:22:30 2019 +0300
+++ b/src/os/unix/ngx_process_cycle.c   Thu Oct 24 16:35:12 2019 +0300
@@ -811,6 +811,8 @@
 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
   "setrlimit(RLIMIT_NOFILE, %i) failed",
   ccf->rlimit_nofile);
+} else {
+ngx_max_sockets = ccf->rlimit_nofile;
 }
 }
 
___
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel


[njs] Fixed [[Prototype]] slot of NativeErrors.

2019-10-24 Thread Dmitry Volyntsev
details:   https://hg.nginx.org/njs/rev/84cb3fa5d1cc
branches:  
changeset: 1200:84cb3fa5d1cc
user:  Dmitry Volyntsev 
date:  Thu Oct 24 16:17:16 2019 +0300
description:
Fixed [[Prototype]] slot of NativeErrors.

diffstat:

 src/njs_builtin.c|   86 +---
 src/test/njs_unit_test.c |  227 ++
 2 files changed, 81 insertions(+), 232 deletions(-)

diffs (405 lines):

diff -r a908c2ef62ca -r 84cb3fa5d1cc src/njs_builtin.c
--- a/src/njs_builtin.c Thu Oct 24 16:17:16 2019 +0300
+++ b/src/njs_builtin.c Thu Oct 24 16:17:16 2019 +0300
@@ -318,6 +318,7 @@ njs_builtin_objects_create(njs_vm_t *vm)
 for (p = njs_constructor_init; *p != NULL; p++) {
 obj = *p;
 
+func->object.type = NJS_FUNCTION;
 func->object.shared = 0;
 func->object.extensible = 1;
 func->native = 1;
@@ -351,76 +352,76 @@ njs_prototype_function(njs_vm_t *vm, njs
 
 /*
  * Object(),
- * Object.__proto__ -> Function_Prototype,
- * Object_Prototype.__proto__   -> null,
+ * Object.__proto__ -> Function.prototype,
+ * Object.prototype.__proto__   -> null,
  *   the null value is handled by njs_object_prototype_proto(),
  *
  * Array(),
- * Array.__proto__  -> Function_Prototype,
- * Array_Prototype.__proto__-> Object_Prototype,
+ * Array.__proto__  -> Function.prototype,
+ * Array.prototype.__proto__-> Object.prototype,
  *
  * Boolean(),
- * Boolean.__proto__-> Function_Prototype,
- * Boolean_Prototype.__proto__  -> Object_Prototype,
+ * Boolean.__proto__-> Function.prototype,
+ * Boolean.prototype.__proto__  -> Object.prototype,
  *
  * Number(),
- * Number.__proto__ -> Function_Prototype,
- * Number_Prototype.__proto__   -> Object_Prototype,
+ * Number.__proto__ -> Function.prototype,
+ * Number.prototype.__proto__   -> Object.prototype,
  *
  * String(),
- * String.__proto__ -> Function_Prototype,
- * String_Prototype.__proto__   -> Object_Prototype,
+ * String.__proto__ -> Function.prototype,
+ * String.prototype.__proto__   -> Object.prototype,
  *
  * Function(),
- * Function.__proto__   -> Function_Prototype,
- * Function_Prototype.__proto__ -> Object_Prototype,
+ * Function.__proto__   -> Function.prototype,
+ * Function.prototype.__proto__ -> Object.prototype,
  *
  * RegExp(),
- * RegExp.__proto__ -> Function_Prototype,
- * RegExp_Prototype.__proto__   -> Object_Prototype,
+ * RegExp.__proto__ -> Function.prototype,
+ * RegExp.prototype.__proto__   -> Object.prototype,
  *
  * Date(),
- * Date.__proto__   -> Function_Prototype,
- * Date_Prototype.__proto__ -> Object_Prototype,
+ * Date.__proto__   -> Function.prototype,
+ * Date.prototype.__proto__ -> Object.prototype,
  *
  * Error(),
- * Error.__proto__   -> Function_Prototype,
- * Error_Prototype.__proto__ -> Object_Prototype,
+ * Error.__proto__   -> Function.prototype,
+ * Error.prototype.__proto__ -> Object.prototype,
  *
  * EvalError(),
- * EvalError.__proto__   -> Function_Prototype,
- * EvalError_Prototype.__proto__ -> Error_Prototype,
+ * EvalError.__proto__   -> Error,
+ * EvalError.prototype.__proto__ -> Error.prototype,
  *
  * InternalError(),
- * InternalError.__proto__   -> Function_Prototype,
- * InternalError_Prototype.__proto__ -> Error_Prototype,
+ * InternalError.__proto__   -> Error,
+ * InternalError.prototype.__proto__ -> Error.prototype,
  *
  * RangeError(),
- * RangeError.__proto__   -> Function_Prototype,
- * RangeError_Prototype.__proto__ -> Error_Prototype,
+ * RangeError.__proto__   -> Error,
+ * RangeError.prototype.__proto__ -> Error.prototype,
  *
  * ReferenceError(),
- * ReferenceError.__proto__   -> Function_Prototype,
- * ReferenceError_Prototype.__proto__ -> Error_Prototype,
+ * ReferenceError.__proto__   -> Error,
+ * ReferenceError.prototype.__proto__ -> Error.prototype,
  *
  * SyntaxError(),
- * SyntaxError.__proto__   -> Function_Prototype,
- * SyntaxError_Prototype.__proto__ -> Error_Prototype,
+ * SyntaxError.__proto__   -> Error,
+ * SyntaxError.prototype.__proto__ -> Error.prototype,
  *
  * TypeError(),
- * TypeError.__proto__   -> Function_Prototype,
- * TypeError_Prototype.__proto__ -> Error_Prototype,
+ * TypeError.__proto__   -> Error,
+ * TypeError.prototype.__proto__ -> Error.prototype,
  *
  * URIError(),
- * URIError.__proto__   -> Function_Prototype,
- * URIError_Prototype.__proto__ -> Error_Prototype,
+ * URIError.__proto__   -> Error,
+ * URIError.prototype.__proto__ -> Error.prototype,
  *
  * MemoryError(),
- * MemoryError.__proto__   -> Function_Prototype,
- * MemoryError_Prototype.__proto__ -> Error_Prototype,
+ * MemoryError.__proto__   -> Error,
+ * 

[njs] Fixed NativeError.prototype.message properties.

2019-10-24 Thread Dmitry Volyntsev
details:   https://hg.nginx.org/njs/rev/d849bf348b0d
branches:  
changeset: 1201:d849bf348b0d
user:  Dmitry Volyntsev 
date:  Thu Oct 24 16:17:17 2019 +0300
description:
Fixed NativeError.prototype.message properties.

diffstat:

 src/njs_error.c  |  56 
 src/test/njs_unit_test.c |   4 ++-
 test/njs_expect_test.exp |   3 ++
 3 files changed, 62 insertions(+), 1 deletions(-)

diffs (139 lines):

diff -r 84cb3fa5d1cc -r d849bf348b0d src/njs_error.c
--- a/src/njs_error.c   Thu Oct 24 16:17:16 2019 +0300
+++ b/src/njs_error.c   Thu Oct 24 16:17:17 2019 +0300
@@ -779,6 +779,14 @@ static const njs_object_prop_t  njs_eval
 },
 
 {
+.type = NJS_PROPERTY,
+.name = njs_string("message"),
+.value = njs_string(""),
+.writable = 1,
+.configurable = 1,
+},
+
+{
 .type = NJS_PROPERTY_HANDLER,
 .name = njs_string("constructor"),
 .value = njs_prop_handler(njs_object_prototype_create_constructor),
@@ -827,6 +835,14 @@ static const njs_object_prop_t  njs_inte
 
 {
 .type = NJS_PROPERTY,
+.name = njs_string("message"),
+.value = njs_string(""),
+.writable = 1,
+.configurable = 1,
+},
+
+{
+.type = NJS_PROPERTY,
 .name = njs_string("toString"),
 .value = njs_native_function(njs_internal_error_prototype_to_string, 
0),
 .writable = 1,
@@ -853,6 +869,14 @@ static const njs_object_prop_t  njs_rang
 },
 
 {
+.type = NJS_PROPERTY,
+.name = njs_string("message"),
+.value = njs_string(""),
+.writable = 1,
+.configurable = 1,
+},
+
+{
 .type = NJS_PROPERTY_HANDLER,
 .name = njs_string("constructor"),
 .value = njs_prop_handler(njs_object_prototype_create_constructor),
@@ -880,6 +904,14 @@ static const njs_object_prop_t  njs_refe
 },
 
 {
+.type = NJS_PROPERTY,
+.name = njs_string("message"),
+.value = njs_string(""),
+.writable = 1,
+.configurable = 1,
+},
+
+{
 .type = NJS_PROPERTY_HANDLER,
 .name = njs_string("constructor"),
 .value = njs_prop_handler(njs_object_prototype_create_constructor),
@@ -907,6 +939,14 @@ static const njs_object_prop_t  njs_synt
 },
 
 {
+.type = NJS_PROPERTY,
+.name = njs_string("message"),
+.value = njs_string(""),
+.writable = 1,
+.configurable = 1,
+},
+
+{
 .type = NJS_PROPERTY_HANDLER,
 .name = njs_string("constructor"),
 .value = njs_prop_handler(njs_object_prototype_create_constructor),
@@ -934,6 +974,14 @@ static const njs_object_prop_t  njs_type
 },
 
 {
+.type = NJS_PROPERTY,
+.name = njs_string("message"),
+.value = njs_string(""),
+.writable = 1,
+.configurable = 1,
+},
+
+{
 .type = NJS_PROPERTY_HANDLER,
 .name = njs_string("constructor"),
 .value = njs_prop_handler(njs_object_prototype_create_constructor),
@@ -962,6 +1010,14 @@ static const njs_object_prop_t  njs_uri_
 
 {
 .type = NJS_PROPERTY,
+.name = njs_string("message"),
+.value = njs_string(""),
+.writable = 1,
+.configurable = 1,
+},
+
+{
+.type = NJS_PROPERTY,
 .name = njs_string("name"),
 .value = njs_string("URIError"),
 .writable = 1,
diff -r 84cb3fa5d1cc -r d849bf348b0d src/test/njs_unit_test.c
--- a/src/test/njs_unit_test.c  Thu Oct 24 16:17:16 2019 +0300
+++ b/src/test/njs_unit_test.c  Thu Oct 24 16:17:17 2019 +0300
@@ -8710,11 +8710,13 @@ static njs_unit_test_t  njs_test[] =
 "   var name2 = (inst = e('e'), inst.name = 'E', inst.toString() === 
'E: e');"
 "   var name3 = (inst = e('e'), inst.name = '', inst.toString() === 
'e');"
 "   var name4 = e().toString() === `${e.prototype.name}`;"
+"   var name_prop = Object.getOwnPropertyDescriptor(e.prototype, 
'message');"
+"   name_prop = name_prop.writable && !name_prop.enumerable && 
name_prop.configurable;"
 "   var own_proto_ctor = e.prototype.hasOwnProperty('constructor');"
 ""
 "   return proto && proto2 && iproto && iproto2 "
 "  && tpof && ctor && msg && name && name2 && name3 && name4 "
-"  && own_proto_ctor;"
+"  && name_prop && own_proto_ctor;"
 "};"
 "["
 "  EvalError,"
diff -r 84cb3fa5d1cc -r d849bf348b0d test/njs_expect_test.exp
--- a/test/njs_expect_test.exp  Thu Oct 24 16:17:16 2019 +0300
+++ b/test/njs_expect_test.exp  Thu Oct 24 16:17:17 2019 +0300
@@ -766,6 +766,9 @@ njs_test {
  "Error: loading exception\r\nat module \\(loading_exception.js:1\\)"}
 {"import lib3 from 'lib1.js'\r\n"
  "undefined\r\n"}
+} "-p test/module/"
+
+njs_test {
 {"import m from 'export_name.js'\r\n"
  

[njs] Refactoring Error value types.

2019-10-24 Thread Dmitry Volyntsev
details:   https://hg.nginx.org/njs/rev/a908c2ef62ca
branches:  
changeset: 1199:a908c2ef62ca
user:  Dmitry Volyntsev 
date:  Thu Oct 24 16:17:16 2019 +0300
description:
Refactoring Error value types.

Eliminating special value types (njs_value_type_t) for error instance
objects.  According to the spec error instance objects are ordinary
objects which have an [[ErrorData]] internal slot.

diffstat:

 src/njs_builtin.c|  16 
 src/njs_error.c  |  38 --
 src/njs_error.h  |  22 +++---
 src/njs_fs.c |   4 ++--
 src/njs_generator.c  |   3 ++-
 src/njs_json.c   |  11 ++-
 src/njs_module.c |   1 +
 src/njs_object.c |  15 ++-
 src/njs_parser.c |   6 +++---
 src/njs_parser.h |   9 +
 src/njs_value.c  |  32 
 src/njs_value.h  |  29 ++---
 src/njs_vm.c |  10 +++---
 src/njs_vm.h |   6 +++---
 src/njs_vmcode.c |  10 +-
 src/test/njs_unit_test.c |  12 
 16 files changed, 97 insertions(+), 127 deletions(-)

diffs (663 lines):

diff -r b02b79e30d4a -r a908c2ef62ca src/njs_builtin.c
--- a/src/njs_builtin.c Thu Oct 24 16:15:01 2019 +0300
+++ b/src/njs_builtin.c Thu Oct 24 16:17:16 2019 +0300
@@ -152,14 +152,14 @@ const njs_object_prototype_t  njs_protot
 { .object_value = { .value = njs_value(NJS_DATA, 0, 0.0),
 .object = { .type = NJS_OBJECT } } },
 
-{ .object =   { .type = NJS_OBJECT_ERROR } },
-{ .object =   { .type = NJS_OBJECT_EVAL_ERROR } },
-{ .object =   { .type = NJS_OBJECT_INTERNAL_ERROR } },
-{ .object =   { .type = NJS_OBJECT_RANGE_ERROR } },
-{ .object =   { .type = NJS_OBJECT_REF_ERROR } },
-{ .object =   { .type = NJS_OBJECT_SYNTAX_ERROR } },
-{ .object =   { .type = NJS_OBJECT_TYPE_ERROR } },
-{ .object =   { .type = NJS_OBJECT_URI_ERROR } },
+{ .object =   { .type = NJS_OBJECT } },
+{ .object =   { .type = NJS_OBJECT } },
+{ .object =   { .type = NJS_OBJECT } },
+{ .object =   { .type = NJS_OBJECT } },
+{ .object =   { .type = NJS_OBJECT } },
+{ .object =   { .type = NJS_OBJECT } },
+{ .object =   { .type = NJS_OBJECT } },
+{ .object =   { .type = NJS_OBJECT } },
 };
 
 
diff -r b02b79e30d4a -r a908c2ef62ca src/njs_error.c
--- a/src/njs_error.c   Thu Oct 24 16:15:01 2019 +0300
+++ b/src/njs_error.c   Thu Oct 24 16:17:16 2019 +0300
@@ -13,7 +13,7 @@ static const njs_value_t  njs_error_name
 
 
 void
-njs_error_new(njs_vm_t *vm, njs_value_t *dst, njs_value_type_t type,
+njs_error_new(njs_vm_t *vm, njs_value_t *dst, njs_prototype_t type,
 u_char *start, size_t size)
 {
 ssize_tlength;
@@ -36,12 +36,12 @@ njs_error_new(njs_vm_t *vm, njs_value_t 
 return;
 }
 
-njs_set_type_object(dst, error, type);
+njs_set_object(dst, error);
 }
 
 
 void
-njs_error_fmt_new(njs_vm_t *vm, njs_value_t *dst, njs_value_type_t type,
+njs_error_fmt_new(njs_vm_t *vm, njs_value_t *dst, njs_prototype_t type,
 const char *fmt, ...)
 {
 va_list  args;
@@ -60,7 +60,7 @@ njs_error_fmt_new(njs_vm_t *vm, njs_valu
 
 
 njs_object_t *
-njs_error_alloc(njs_vm_t *vm, njs_value_type_t type, const njs_value_t *name,
+njs_error_alloc(njs_vm_t *vm, njs_prototype_t type, const njs_value_t *name,
 const njs_value_t *message)
 {
 njs_int_t   ret;
@@ -75,10 +75,11 @@ njs_error_alloc(njs_vm_t *vm, njs_value_
 
 njs_lvlhsh_init(>hash);
 njs_lvlhsh_init(>shared_hash);
-error->type = type;
+error->type = NJS_OBJECT;
 error->shared = 0;
 error->extensible = 1;
-error->__proto__ = >prototypes[njs_error_prototype_index(type)].object;
+error->error_data = 1;
+error->__proto__ = >prototypes[type].object;
 
 lhq.replace = 0;
 lhq.pool = vm->mem_pool;
@@ -135,7 +136,7 @@ memory_error:
 
 static njs_int_t
 njs_error_create(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs,
-njs_value_type_t type)
+njs_prototype_t type)
 {
 njs_int_t ret;
 njs_value_t   *value;
@@ -158,7 +159,7 @@ njs_error_create(njs_vm_t *vm, njs_value
 return NJS_ERROR;
 }
 
-njs_set_type_object(>retval, error, type);
+njs_set_object(>retval, error);
 
 return NJS_OK;
 }
@@ -168,7 +169,7 @@ njs_int_t
 njs_error_constructor(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs,
 njs_index_t unused)
 {
-return njs_error_create(vm, args, nargs, NJS_OBJECT_ERROR);
+return njs_error_create(vm, args, nargs, NJS_PROTOTYPE_ERROR);
 }
 
 
@@ -210,7 +211,7 @@ njs_int_t
 njs_eval_error_constructor(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs,
 njs_index_t unused)
 {
-return njs_error_create(vm, args, nargs, NJS_OBJECT_EVAL_ERROR);
+return njs_error_create(vm, args, nargs, 

[njs] Fixed heap-buffer-overflow in njs_array_reverse_iterator() function.

2019-10-24 Thread Alexander Borisov
details:   https://hg.nginx.org/njs/rev/b02b79e30d4a
branches:  
changeset: 1198:b02b79e30d4a
user:  Alexander Borisov 
date:  Thu Oct 24 16:15:01 2019 +0300
description:
Fixed heap-buffer-overflow in njs_array_reverse_iterator() function.

Affected JS functions in Array.prototype: lastIndexOf, reduceRight.

diffstat:

 src/njs_array.c  |   3 ++-
 src/test/njs_unit_test.c |  16 
 2 files changed, 18 insertions(+), 1 deletions(-)

diffs (46 lines):

diff -r 9e327cd3a33e -r b02b79e30d4a src/njs_array.c
--- a/src/njs_array.c   Wed Oct 23 14:42:38 2019 +0300
+++ b/src/njs_array.c   Thu Oct 24 16:15:01 2019 +0300
@@ -1594,7 +1594,8 @@ njs_array_reverse_iterator(njs_vm_t *vm,
 } else {
 /* UTF-8 string. */
 
-p = njs_string_offset(string_prop.start, end, from + 1);
+p = njs_string_offset(string_prop.start, end, from);
+p = njs_utf8_next(p, end);
 
 i = from + 1;
 
diff -r 9e327cd3a33e -r b02b79e30d4a src/test/njs_unit_test.c
--- a/src/test/njs_unit_test.c  Wed Oct 23 14:42:38 2019 +0300
+++ b/src/test/njs_unit_test.c  Thu Oct 24 16:15:01 2019 +0300
@@ -4407,6 +4407,17 @@ static njs_unit_test_t  njs_test[] =
   "Array.prototype.lastIndexOf.call(o); i"),
   njs_str("1") },
 
+{ njs_str("[''].lastIndexOf.call('0а00')"),
+  njs_str("-1") },
+
+{ njs_str("var o = 'ГВБА';"
+  "Array.prototype.lastIndexOf.call(o, 'Г', 0)"),
+  njs_str("0") },
+
+{ njs_str("var o = 'ГВБА';"
+  "Array.prototype.lastIndexOf.call(o, 'Г', 4)"),
+  njs_str("0") },
+
 { njs_str("[1,2,3,4].includes()"),
   njs_str("false") },
 
@@ -5029,6 +5040,11 @@ static njs_unit_test_t  njs_test[] =
   "catch (e) {i += '; ' + e} i"),
   njs_str("1; TypeError: unexpected iterator arguments") },
 
+{ njs_str("var m = [];"
+  "[''].reduceRight.call('0а00', (p, 
v, i, a) => {m.push(v)});"
+  "m.join('')"),
+  njs_str("0а0") },
+
 { njs_str("var a = ['1','2','3','4','5','6']; a.sort()"),
   njs_str("1,2,3,4,5,6") },
 
___
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel

[nginx] Core: moved PROXY protocol fields out of ngx_connection_t.

2019-10-24 Thread Roman Arutyunyan
details:   https://hg.nginx.org/nginx/rev/06b01840bd42
branches:  
changeset: 7590:06b01840bd42
user:  Roman Arutyunyan 
date:  Mon Oct 21 18:06:19 2019 +0300
description:
Core: moved PROXY protocol fields out of ngx_connection_t.

Now a new structure ngx_proxy_protocol_t holds these fields.  This allows
to add more PROXY protocol fields in the future without modifying the
connection structure.

diffstat:

 src/core/ngx_connection.h |   3 +-
 src/core/ngx_core.h   |   1 +
 src/core/ngx_proxy_protocol.c |  57 +++---
 src/core/ngx_proxy_protocol.h |   6 +++
 src/http/modules/ngx_http_realip_module.c |   7 +--
 src/http/ngx_http_variables.c |  23 ++--
 src/stream/ngx_stream_realip_module.c |   8 ++--
 src/stream/ngx_stream_variables.c |  23 ++--
 8 files changed, 89 insertions(+), 39 deletions(-)

diffs (328 lines):

diff -r 486d2e0b1b6f -r 06b01840bd42 src/core/ngx_connection.h
--- a/src/core/ngx_connection.h Thu Oct 24 13:47:28 2019 +0300
+++ b/src/core/ngx_connection.h Mon Oct 21 18:06:19 2019 +0300
@@ -147,8 +147,7 @@ struct ngx_connection_s {
 socklen_t   socklen;
 ngx_str_t   addr_text;
 
-ngx_str_t   proxy_protocol_addr;
-in_port_t   proxy_protocol_port;
+ngx_proxy_protocol_t  *proxy_protocol;
 
 #if (NGX_SSL || NGX_COMPAT)
 ngx_ssl_connection_t  *ssl;
diff -r 486d2e0b1b6f -r 06b01840bd42 src/core/ngx_core.h
--- a/src/core/ngx_core.h   Thu Oct 24 13:47:28 2019 +0300
+++ b/src/core/ngx_core.h   Mon Oct 21 18:06:19 2019 +0300
@@ -26,6 +26,7 @@ typedef struct ngx_event_aio_s   ngx
 typedef struct ngx_connection_s  ngx_connection_t;
 typedef struct ngx_thread_task_s ngx_thread_task_t;
 typedef struct ngx_ssl_s ngx_ssl_t;
+typedef struct ngx_proxy_protocol_s  ngx_proxy_protocol_t;
 typedef struct ngx_ssl_connection_s  ngx_ssl_connection_t;
 typedef struct ngx_udp_connection_s  ngx_udp_connection_t;
 
diff -r 486d2e0b1b6f -r 06b01840bd42 src/core/ngx_proxy_protocol.c
--- a/src/core/ngx_proxy_protocol.c Thu Oct 24 13:47:28 2019 +0300
+++ b/src/core/ngx_proxy_protocol.c Mon Oct 21 18:06:19 2019 +0300
@@ -47,9 +47,10 @@ static u_char *ngx_proxy_protocol_v2_rea
 u_char *
 ngx_proxy_protocol_read(ngx_connection_t *c, u_char *buf, u_char *last)
 {
-size_t len;
-u_char ch, *p, *addr, *port;
-ngx_int_t  n;
+size_t len;
+u_char ch, *p, *addr, *port;
+ngx_int_t  n;
+ngx_proxy_protocol_t  *pp;
 
 static const u_char signature[] = "\r\n\r\n\0\r\nQUIT\n";
 
@@ -105,15 +106,20 @@ ngx_proxy_protocol_read(ngx_connection_t
 }
 }
 
-len = p - addr - 1;
-c->proxy_protocol_addr.data = ngx_pnalloc(c->pool, len);
-
-if (c->proxy_protocol_addr.data == NULL) {
+pp = ngx_pcalloc(c->pool, sizeof(ngx_proxy_protocol_t));
+if (pp == NULL) {
 return NULL;
 }
 
-ngx_memcpy(c->proxy_protocol_addr.data, addr, len);
-c->proxy_protocol_addr.len = len;
+len = p - addr - 1;
+
+pp->src_addr.data = ngx_pnalloc(c->pool, len);
+if (pp->src_addr.data == NULL) {
+return NULL;
+}
+
+ngx_memcpy(pp->src_addr.data, addr, len);
+pp->src_addr.len = len;
 
 for ( ;; ) {
 if (p == last) {
@@ -145,11 +151,13 @@ ngx_proxy_protocol_read(ngx_connection_t
 goto invalid;
 }
 
-c->proxy_protocol_port = (in_port_t) n;
+pp->src_port = (in_port_t) n;
 
 ngx_log_debug2(NGX_LOG_DEBUG_CORE, c->log, 0,
-   "PROXY protocol address: %V %d", >proxy_protocol_addr,
-   c->proxy_protocol_port);
+   "PROXY protocol address: %V %d", >src_addr,
+   pp->src_port);
+
+c->proxy_protocol = pp;
 
 skip:
 
@@ -220,6 +228,7 @@ ngx_proxy_protocol_v2_read(ngx_connectio
 socklen_t   socklen;
 ngx_uint_t  version, command, family, transport;
 ngx_sockaddr_t  sockaddr;
+ngx_proxy_protocol_t   *pp;
 ngx_proxy_protocol_header_t*header;
 ngx_proxy_protocol_inet_addrs_t*in;
 #if (NGX_HAVE_INET6)
@@ -266,6 +275,11 @@ ngx_proxy_protocol_v2_read(ngx_connectio
 return end;
 }
 
+pp = ngx_pcalloc(c->pool, sizeof(ngx_proxy_protocol_t));
+if (pp == NULL) {
+return NULL;
+}
+
 family = header->family_transport >> 4;
 
 switch (family) {
@@ -282,7 +296,7 @@ ngx_proxy_protocol_v2_read(ngx_connectio
 sockaddr.sockaddr_in.sin_port = 0;
 memcpy(_in.sin_addr, in->src_addr, 4);
 
-c->proxy_protocol_port = ngx_proxy_protocol_parse_uint16(in->src_port);
+pp->src_port = ngx_proxy_protocol_parse_uint16(in->src_port);
 
 socklen = sizeof(struct sockaddr_in);
 
@@ -304,7 +318,7 @@ ngx_proxy_protocol_v2_read(ngx_connectio
 

[nginx] Parsing server PROXY protocol address and port (ticket #1206).

2019-10-24 Thread Roman Arutyunyan
details:   https://hg.nginx.org/nginx/rev/89adf49fe76a
branches:  
changeset: 7591:89adf49fe76a
user:  Roman Arutyunyan 
date:  Mon Oct 21 20:22:30 2019 +0300
description:
Parsing server PROXY protocol address and port (ticket #1206).

New variables $proxy_protocol_server_addr and $proxy_protocol_server_port are
added both to HTTP and Stream.

diffstat:

 src/core/ngx_proxy_protocol.c |  206 -
 src/core/ngx_proxy_protocol.h |2 +
 src/http/ngx_http_variables.c |   23 +++-
 src/stream/ngx_stream_variables.c |   23 +++-
 4 files changed, 173 insertions(+), 81 deletions(-)

diffs (419 lines):

diff -r 06b01840bd42 -r 89adf49fe76a src/core/ngx_proxy_protocol.c
--- a/src/core/ngx_proxy_protocol.c Mon Oct 21 18:06:19 2019 +0300
+++ b/src/core/ngx_proxy_protocol.c Mon Oct 21 20:22:30 2019 +0300
@@ -40,6 +40,10 @@ typedef struct {
 } ngx_proxy_protocol_inet6_addrs_t;
 
 
+static u_char *ngx_proxy_protocol_read_addr(ngx_connection_t *c, u_char *p,
+u_char *last, ngx_str_t *addr);
+static u_char *ngx_proxy_protocol_read_port(u_char *p, u_char *last,
+in_port_t *port, u_char sep);
 static u_char *ngx_proxy_protocol_v2_read(ngx_connection_t *c, u_char *buf,
 u_char *last);
 
@@ -48,8 +52,7 @@ u_char *
 ngx_proxy_protocol_read(ngx_connection_t *c, u_char *buf, u_char *last)
 {
 size_t len;
-u_char ch, *p, *addr, *port;
-ngx_int_t  n;
+u_char*p;
 ngx_proxy_protocol_t  *pp;
 
 static const u_char signature[] = "\r\n\r\n\0\r\nQUIT\n";
@@ -84,81 +87,48 @@ ngx_proxy_protocol_read(ngx_connection_t
 }
 
 p += 5;
-addr = p;
-
-for ( ;; ) {
-if (p == last) {
-goto invalid;
-}
-
-ch = *p++;
-
-if (ch == ' ') {
-break;
-}
-
-if (ch != ':' && ch != '.'
-&& (ch < 'a' || ch > 'f')
-&& (ch < 'A' || ch > 'F')
-&& (ch < '0' || ch > '9'))
-{
-goto invalid;
-}
-}
 
 pp = ngx_pcalloc(c->pool, sizeof(ngx_proxy_protocol_t));
 if (pp == NULL) {
 return NULL;
 }
 
-len = p - addr - 1;
-
-pp->src_addr.data = ngx_pnalloc(c->pool, len);
-if (pp->src_addr.data == NULL) {
-return NULL;
+p = ngx_proxy_protocol_read_addr(c, p, last, >src_addr);
+if (p == NULL) {
+goto invalid;
 }
 
-ngx_memcpy(pp->src_addr.data, addr, len);
-pp->src_addr.len = len;
-
-for ( ;; ) {
-if (p == last) {
-goto invalid;
-}
-
-if (*p++ == ' ') {
-break;
-}
+p = ngx_proxy_protocol_read_addr(c, p, last, >dst_addr);
+if (p == NULL) {
+goto invalid;
 }
 
-port = p;
-
-for ( ;; ) {
-if (p == last) {
-goto invalid;
-}
-
-if (*p++ == ' ') {
-break;
-}
-}
-
-len = p - port - 1;
-
-n = ngx_atoi(port, len);
-
-if (n < 0 || n > 65535) {
+p = ngx_proxy_protocol_read_port(p, last, >src_port, ' ');
+if (p == NULL) {
 goto invalid;
 }
 
-pp->src_port = (in_port_t) n;
+p = ngx_proxy_protocol_read_port(p, last, >dst_port, CR);
+if (p == NULL) {
+goto invalid;
+}
 
-ngx_log_debug2(NGX_LOG_DEBUG_CORE, c->log, 0,
-   "PROXY protocol address: %V %d", >src_addr,
-   pp->src_port);
+if (p == last) {
+goto invalid;
+}
+
+if (*p++ != LF) {
+goto invalid;
+}
+
+ngx_log_debug4(NGX_LOG_DEBUG_CORE, c->log, 0,
+   "PROXY protocol src: %V %d, dst: %V %d",
+   >src_addr, pp->src_port, >dst_addr, pp->dst_port);
 
 c->proxy_protocol = pp;
 
+return p;
+
 skip:
 
 for ( /* void */ ; p < last - 1; p++) {
@@ -176,6 +146,82 @@ invalid:
 }
 
 
+static u_char *
+ngx_proxy_protocol_read_addr(ngx_connection_t *c, u_char *p, u_char *last,
+ngx_str_t *addr)
+{
+size_t  len;
+u_char  ch, *pos;
+
+pos = p;
+
+for ( ;; ) {
+if (p == last) {
+return NULL;
+}
+
+ch = *p++;
+
+if (ch == ' ') {
+break;
+}
+
+if (ch != ':' && ch != '.'
+&& (ch < 'a' || ch > 'f')
+&& (ch < 'A' || ch > 'F')
+&& (ch < '0' || ch > '9'))
+{
+return NULL;
+}
+}
+
+len = p - pos - 1;
+
+addr->data = ngx_pnalloc(c->pool, len);
+if (addr->data == NULL) {
+return NULL;
+}
+
+ngx_memcpy(addr->data, pos, len);
+addr->len = len;
+
+return p;
+}
+
+
+static u_char *
+ngx_proxy_protocol_read_port(u_char *p, u_char *last, in_port_t *port,
+u_char sep)
+{
+size_t  len;
+u_char *pos;
+ngx_int_t   n;
+
+pos = p;
+
+for ( ;; ) {
+if (p == last) {
+return NULL;
+}
+
+if (*p++ == sep) {
+break;
+   

[nginx] Version bump.

2019-10-24 Thread Roman Arutyunyan
details:   https://hg.nginx.org/nginx/rev/486d2e0b1b6f
branches:  
changeset: 7589:486d2e0b1b6f
user:  Roman Arutyunyan 
date:  Thu Oct 24 13:47:28 2019 +0300
description:
Version bump.

diffstat:

 src/core/nginx.h |  4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diffs (14 lines):

diff -r f292a38a93f5 -r 486d2e0b1b6f src/core/nginx.h
--- a/src/core/nginx.h  Tue Oct 22 18:16:08 2019 +0300
+++ b/src/core/nginx.h  Thu Oct 24 13:47:28 2019 +0300
@@ -9,8 +9,8 @@
 #define _NGINX_H_INCLUDED_
 
 
-#define nginx_version  1017005
-#define NGINX_VERSION  "1.17.5"
+#define nginx_version  1017006
+#define NGINX_VERSION  "1.17.6"
 #define NGINX_VER  "nginx/" NGINX_VERSION
 
 #ifdef NGX_BUILD
___
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel