Nginx-0.7.49

Changes with nginx 0.7.49 06 Apr
2009

*) Change: a segmentation fault might occur in worker process, if 

the
$arg_… variables were used; the bug had appeared in 0.7.48.

Hello!

On Mon, Apr 06, 2009 at 02:45:18PM +0400, Igor S. wrote:

Changes with nginx 0.7.49 06 Apr 2009

*) Change: a segmentation fault might occur in worker process, if the 
   $arg_... variables were used; the bug had appeared in 0.7.48.

It should be

— a/src/core/ngx_string.c
+++ b/src/core/ngx_string.c
@@ -703,14 +703,14 @@ ngx_strlcasestrn(u_char *s1, u_char *las
{
ngx_uint_t c1, c2;

  • c2 = (ngx_uint_t) *s2++;
  • c2 = (c2 >= ‘A’ && c2 <= ‘Z’) ? (c2 | 0x20) : c2;
  • last -= n;
  • if (s1 <= last) {
    return NULL;
    }
  • c2 = (ngx_uint_t) *s2++;
  • c2 = (c2 >= ‘A’ && c2 <= ‘Z’) ? (c2 | 0x20) : c2;
  • last -= n;
  • do {
    do {
    if (s1 == last) {

Shame on me.

Maxim D.

Hello!

On Mon, Apr 06, 2009 at 03:30:54PM +0400, Maxim D. wrote:

 if (s1 <= last) {
     return NULL;
 }
  • c2 = (ngx_uint_t) *s2++;
  • c2 = (c2 >= ‘A’ && c2 <= ‘Z’) ? (c2 | 0x20) : c2;
  • last -= n;
  • do {
    do {
    if (s1 == last) {

Disregard this. It should be

diff --git a/src/core/ngx_string.c b/src/core/ngx_string.c
— a/src/core/ngx_string.c
+++ b/src/core/ngx_string.c
@@ -703,14 +703,14 @@ ngx_strlcasestrn(u_char *s1, u_char *las
{
ngx_uint_t c1, c2;

  • if (s1 <= last) {
  •    return NULL;
    
  • }
  • c2 = (ngx_uint_t) *s2++;
    c2 = (c2 >= ‘A’ && c2 <= ‘Z’) ? (c2 | 0x20) : c2;
    last -= n;
  • if (s1 >= last) {
  •    return NULL;
    
  • }
  • do {
    do {
    if (s1 == last) {

Shame on me again.

Maxim D.

p.s. 0.7.49 doesn’t handle $args_* at all.

On Mon, Apr 06, 2009 at 03:42:57PM +0400, Maxim D. wrote:

*) Change: a segmentation fault might occur in worker process, if the 
  • c2 = (ngx_uint_t) *s2++;

{

  • if (s1 >= last) {
    Maxim D.

p.s. 0.7.49 doesn’t handle $args_* at all.

Yes. Actually it’s enough:

  do {
      do {
          if (s1 >= last) {

Hello!

On Mon, Apr 06, 2009 at 03:44:49PM +0400, Igor S. wrote:

[…]

  •    return NULL;
    
    do {
    Yes. Actually it’s enough:
  do {
      do {
          if (s1 >= last) {

Yes, of course. For some reason I was under impression that “==”
check should be a bit faster, but looks like it’s not true at
least with modern compilers / processors. At least gcc compiles
“==” and “>=” to nearly identical CMP+JCC.

Maxim D.