oss-fuzz/projects/postgresql/add_fuzzers.diff

70 lines
2.1 KiB
Diff
Raw Normal View History

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)