| diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c |
| index 0775abe35d..f53b3580b3 100644 |
| --- a/src/backend/tcop/postgres.c |
| +++ b/src/backend/tcop/postgres.c |
| @@ -105,6 +105,11 @@ int PostAuthDelay = 0; |
| /* Time between checks that the client is still connected. */ |
| int client_connection_check_interval = 0; |
| |
| +#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION |
| +bool fuzzer_first_run = true; |
| +#endif |
| + |
| + |
| /* ---------------- |
| * private typedefs etc |
| * ---------------- |
| @@ -471,11 +476,14 @@ static int |
| ReadCommand(StringInfo inBuf) |
| { |
| int result; |
| - |
| +#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION |
| + result = SocketBackend(inBuf); |
| +#else |
| if (whereToSendOutput == DestRemote) |
| result = SocketBackend(inBuf); |
| else |
| result = InteractiveBackend(inBuf); |
| +#endif |
| return result; |
| } |
| |
| @@ -4021,6 +4029,11 @@ PostgresMain(const char *dbname, const char *username) |
| bool idle_in_transaction_timeout_enabled = false; |
| bool idle_session_timeout_enabled = false; |
| |
| +#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION |
| + if(fuzzer_first_run) |
| + { |
| +#endif /* FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION */ |
| + |
| AssertArg(dbname != NULL); |
| AssertArg(username != NULL); |
| |
| @@ -4312,6 +4325,11 @@ PostgresMain(const char *dbname, const char *username) |
| if (!ignore_till_sync) |
| send_ready_for_query = true; /* initially, or after error */ |
| |
| +#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION |
| + fuzzer_first_run=false; |
| + } |
| +#endif /* FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION */ |
| + |
| /* |
| * Non-error queries loop here. |
| */ |
| diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c |
| index 2af87ee3bd..825bb70532 100644 |
| --- a/src/backend/utils/error/elog.c |
| +++ b/src/backend/utils/error/elog.c |
| @@ -594,7 +594,9 @@ errfinish(const char *filename, int lineno, const char *funcname) |
| } |
| |
| /* Emit the message to the right places */ |
| +#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION |
| EmitErrorReport(); |
| +#endif |
| |
| /* Now free up subsidiary data attached to stack entry, and release it */ |
| if (edata->message) |