Re: Allow escape in application_name - Mailing list pgsql-hackers

From Kyotaro Horiguchi
Subject Re: Allow escape in application_name
Date
Msg-id 20211012.154223.1079581962882569218.horikyota.ntt@gmail.com
Whole thread Raw
In response to Re: Allow escape in application_name  (Kyotaro Horiguchi <horikyota.ntt@gmail.com>)
Responses Re: Allow escape in application_name  (Kyotaro Horiguchi <horikyota.ntt@gmail.com>)
List pgsql-hackers
At Tue, 12 Oct 2021 15:06:11 +0900 (JST), Kyotaro Horiguchi <horikyota.ntt@gmail.com> wrote in 
> "%4%5%6%7p" is converted to "57p".  Do we need to imitate that bug
> with this patch?

So.. I try to describe the behavior for exhaustive patterns..

current:
 A. "^-?[0-9]+.*" : returns valid padding. p goes after the last digit.
 B. "^[^0-9-].*"  : padding = 0, p doesn't advance.
 C. "^-[^0-9].*"  : padding = 0, p advances by 1 byte.
 D. "^-"          : padding = 0, p advances by 1 byte.
  (if *p == 0 then breaks)

I think the patterns covers the all possibilities.

If we code as the following:
        if (*p == '-' ? isdigit(p[1]) : isdigit(p[0]))
        {
            char *endptr;
            padding = strtol(p, &endptr, 10);
            Assert(endptr > p);
            if (*endptr == '\0')
                break;
            p = endptr;
        }
        else
          padding = 0;

  A. "^-?[0-9]+.*" : same to the current
  B. "^[^0-9-].*"  : same to the current
  C. "^-[^0-9].*"  : padding = 0, p doesn't advance.
  D. "^-"          : padding = 0, p doesn't advance.

If we wan to make the behaviors C and D same with the current, the
else clause should be like the follows, but I don't think we need to
do that.

        else
        {
          padding = 0;
          if (*p == '-')
            p++;
          }

regards.

-- 
Kyotaro Horiguchi
NTT Open Source Software Center



pgsql-hackers by date:

Previous
From: Bharath Rupireddy
Date:
Subject: Re: Reword docs of feature "Remove temporary files after backend crash"
Next
From: Bharath Rupireddy
Date:
Subject: Re: Accommodate startup process in a separate ProcState array slot instead of in MaxBackends slots.