diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 825fd55107..f3e2dbbf20 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -105,6 +105,10 @@ 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 * ---------------- @@ -454,10 +458,15 @@ 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; } @@ -3910,6 +3919,11 @@ PostgresMain(int argc, char *argv[], 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 */ + /* Initialize startup process environment if necessary. */ if (!IsUnderPostmaster) InitStandaloneProcess(argv[0]); @@ -4271,6 +4285,11 @@ PostgresMain(int argc, char *argv[], 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 a1ebe06d5b..dfa94013a0 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)