8 Commits
Author SHA1 Message Date
Andrew Clayton c1cea3c97d Router: avoided undefined behaviour.
In src/nxt_http_route_addr.c::nxt_http_route_addr_pattern_parse() there
was potentially undefined behaviour when shifting a 32 bit value by 32
bits, this could happen if cidr_prefix was 0.

Promote the shiftee to unsigned long long to avoid this issue.
2022-07-21 00:37:20 +01:00
Andrew Clayton 02659b1ee3 Tests: added tests for translating $dollar into a literal $.
If you need to specify a $ in a URI you can now use '$dollar' or
'${dollar}'.

Added some tests for the above to test_variables.py setting a Location
string.
2022-07-20 23:28:06 +01:00
Andrew Clayton eebaff42ea Var: added a $dollar variable that translates to a '$'.
Allow $dollar (or ${dollar}) to translate to a literal $ to allow
support for sub-delimiters in URIs.

It is possible to have URLs like

  https://example.com/path/15$1588/9925$2976.html

and thus it would be useful to be able to specify them in various bits
of the unit config such as the location setting.

However this hadn't been possible due to $ being used to denote
variables for substitution. E.g $host.

As was noted in the below GitHub issue it was suggested by @VBart to
use $sign to represent a literal $, however I feel $dollar is more
appropriate so we have a variable named after the thing it represents,
also @tippexs found[0] that &dollar is used in HTML to represent a $, so
there is some somewhat related precedent.

(The other idea to use $$ was rejected in my original pull-request[1]
 for this issue.)

This means the above URL could be specified as

  https://example.com/path/15${dollar}1588/9925${dollar}2976.html

in the unit config.

This is done by adding a variable called 'dollar' which is loaded into
the variables hash table which translates into a literal $.

This is then handled in nxt_var_next_part() where variables are parsed
for lookup and $dollar is set for substitution by a literal '$'. Actual
variable substitution happens in nxt_var_query_finish().

[0]: https://github.com/nginx/unit/pull/693#issuecomment-1130412323
[1]: https://github.com/nginx/unit/pull/693

Closes: https://github.com/nginx/unit/issues/675
2022-07-20 23:28:02 +01:00
Andrew ClaytonandAlejandro Colomar 63667e2f9c Unit: removed a useless assignment.
As was pointed out by the cppcheck[0] static code analysis utility there
was a useless assignment in nxt_unit_request_read(). The size parameter
is passed in by value and was being modified without being used again.

[0]: https://cppcheck.sourceforge.io/
2022-06-22 00:53:53 +02:00
Andrew ClaytonandAlejandro Colomar 39819143ea Unit: avoided needlessly setting lib in nxt_unit_shm_open().
As was pointed out by the cppcheck[0] static code analysis utility, lib
was being set in nxt_unit_shm_open() regardless of platform when in fact
it's only used when (NXT_HAVE_MEMFD_CREATE || NXT_HAVE_SHM_OPEN).

Move the variable declaration & definition to be within the

  #if (NXT_HAVE_MEMFD_CREATE || NXT_HAVE_SHM_OPEN)

block.

[0]: https://cppcheck.sourceforge.io/
2022-06-22 00:30:44 +02:00
Andrew ClaytonandAlejandro Colomar 7a286ec079 Socket: removed useless port < 1 check.
In src/nxt_sockaddr.c::nxt_job_sockaddr_inet_parse() there is a check
that port > 0 then there is a check that port < 1 || port > 65535, well
we _know_ it can't be less than 1.
2022-06-22 00:30:44 +02:00
Andrew ClaytonandAlejandro Colomar 29c7208526 Marked a couple of variables 'const'.
As was pointed out by the cppcheck[0] static code analysis utility we
can mark a couple of variables as 'const'. This acts as a hint to the
compiler about our intentions and the compiler will tell us when we
deviate from them.

[0]: https://cppcheck.sourceforge.io/
2022-06-22 00:30:44 +02:00
Andrew ClaytonandAlejandro Colomar 4418f99cd4 Constified numerous function parameters.
As was pointed out by the cppcheck[0] static code analysis utility we
can mark numerous function parameters as 'const'. This acts as a hint to
the compiler about our intentions and the compiler will tell us when we
deviate from them.

[0]: https://cppcheck.sourceforge.io/
2022-06-22 00:30:44 +02:00