Re: pgsql: Allow db.schema.table patterns, but complain about random garbag

From: Andrew Dunstan <andrew(at)dunslane(dot)net>
To: Noah Misch <noah(at)leadboat(dot)com>, Robert Haas <robertmhaas(at)gmail(dot)com>, Thomas Munro <thomas(dot)munro(at)gmail(dot)com>
Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: pgsql: Allow db.schema.table patterns, but complain about random garbag
Date: 2022-04-24 17:09:08
Message-ID: 22c77d3c-3f90-2451-1f95-ed0d3e196d81@dunslane.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers pgsql-hackers


On 2022-04-22 Fr 22:59, Noah Misch wrote:
> On Sat, Apr 23, 2022 at 09:12:20AM +1200, Thomas Munro wrote:
>> On Sat, Apr 23, 2022 at 8:06 AM Robert Haas <robertmhaas(at)gmail(dot)com> wrote:
>>> I have to say the fact that IPC::Run does shell-glob expansion of its
>>> arguments on some machines and not others seems ludicrous to me. This
>>> patch may be overtested, but such a radical behavior difference is
>>> completely nuts. How is anyone supposed to write reliable tests for
>>> any feature in the face of such wildly inconsistent behavior?

(I missed seeing the part where I was asked for help earlier on this thread)

> The MinGW gcc crt*.o files do shell-glob expansion on the arguments before
> entering main(). See https://google.com/search?q=mingw+command+line+glob for
> various discussion of that behavior. I suspect you experienced that, not any
> IPC::Run behavior. (I haven't tested, though.) Commit 11e9caf likely had the
> same cause, though the commit message attributed it to the msys shell rather
> than to crt*.o.
>
> Let's disable that MinGW compiler behavior.
> https://willus.com/mingw/_globbing.shtml lists two ways of achieving that.

Yeah. I can definitely confirm that this is the proximate cause of the
issue, and not either IPC::Run or the shell, which is why all my
experiments on this failed. With this patch

diff --git a/src/include/port/win32.h b/src/include/port/win32.h
index c6213c77c3..456c3f31f1 100644
--- a/src/include/port/win32.h
+++ b/src/include/port/win32.h
@@ -77,3 +77,7 @@ struct sockaddr_un
char sun_path[108];
};
#define HAVE_STRUCT_SOCKADDR_UN 1
+
+#ifndef _MSC_VER
+extern int _CRT_glob = 0; /* 0 turns off globbing; 1 turns it on */
+#endif

fairywren happily passes the tests that Robert has since reverted.

I'm rather tempted to call this CRT behaviour a mis-feature, especially
as a default. I think we should certainly disable it in the development
branch, and consider back-patching it, although it is a slight change in
behaviour, albeit one that we didn't know about much less want or
document. Still, we been building with mingw compilers for about 20
years and haven't hit this before so far as we know, so maybe not.

cheers

andrew

--
Andrew Dunstan
EDB: https://www.enterprisedb.com

In response to

Responses

Browse pgsql-committers by date

  From Date Subject
Next Message Noah Misch 2022-04-24 18:19:34 Re: pgsql: Allow db.schema.table patterns, but complain about random garbag
Previous Message Tom Lane 2022-04-23 16:16:18 pgsql: Fix incautious CTE matching in rewriteSearchAndCycle().

Browse pgsql-hackers by date

  From Date Subject
Next Message Noah Misch 2022-04-24 18:19:34 Re: pgsql: Allow db.schema.table patterns, but complain about random garbag
Previous Message wangw.fnst@fujitsu.com 2022-04-24 06:16:04 RE: Data is copied twice when specifying both child and parent table in publication