On 10/13/2018 09:59 PM, Michael Paquier wrote:
On Sat, Oct 13, 2018 at 05:53:00PM -0400, Andrew Dunstan wrote:
It occurred to me that a pretty simple fix could just be to blacklist
everything that didn't start with a digit. The whitelist approach is
probably preferable... depends how urgent we see this as.
Yeah, possibly, still that's not a correct long-term fix.  So attached
is what I think we should do for HEAD and REL_11_STABLE with an approach
using a whitelist.  I have added positive and negative tests on top of
the existing TAP tests, as suggested by Michael B, and I made the code
use relpath.h to make sure that we don't miss any fork types.

Any objections to this patch?



This code now seems redundant:

         if (strcmp(fn, ".") == 0 ||
             strcmp(fn, "..") == 0)
             return true;


I would probably reverse the order of these two tests. It might not make any difference, assuming fn is never an empty string, but it seems more logical to me.

   +    /* good to go if only digits */
   +    if (fn[pos] == '\0')
   +        return false;
   +    /* leave if no digits */
   +    if (pos == 0)
   +        return true;

It also looks to me like the check for a segment number doesn't ensure there is at least 
one digit, so "123." might pass, but I could be wrong. In any case, there isn't 
a test for that, and there probably should be.

cheers

andrew


--
Andrew Dunstan                https://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services


Reply via email to