* *
****************************************************/
+#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
+const uint8_t *fuzzBuffer;
+size_t fuzzSize;
+size_t fuzzPos;
+
+void sock_initfuzz(const uint8_t *Data, size_t Size) {
+ fuzzPos = 0;
+ fuzzSize = Size;
+ fuzzBuffer = Data;
+}
+
+static int fuzz_recv(char *bufp, int remaining) {
+ if (remaining > fuzzSize - fuzzPos) {
+ remaining = fuzzSize - fuzzPos;
+ }
+ if (fuzzPos < fuzzSize) {
+ memcpy(bufp, fuzzBuffer + fuzzPos, remaining);
+ }
+ fuzzPos += remaining;
+ return remaining;
+}
+#endif
+
/*
* Format an error message given an errno value (UN*X) or a Winsock error
* (Windows).
*/
while (tempaddrinfo)
{
-
+#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
+ break;
+#endif
if (connect(sock, tempaddrinfo->ai_addr, (int) tempaddrinfo->ai_addrlen) == -1)
{
size_t msglen;
if (ssl) return ssl_send(ssl, buffer, remaining, errbuf, errbuflen);
#endif
+#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
+ nsent = remaining;
+#else
#ifdef MSG_NOSIGNAL
/*
* Send with MSG_NOSIGNAL, so that we don't get SIGPIPE
#else
nsent = send(sock, buffer, remaining, 0);
#endif
+#endif //FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
if (nsent == -1)
{
* Win32.
*/
for (;;) {
-#ifdef HAVE_OPENSSL
+#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
+ nread = fuzz_recv(bufp, remaining);
+#elif defined(HAVE_OPENSSL)
if (ssl)
{
/*
#ifdef HAVE_STRUCT_MSGHDR_MSG_FLAGS
message.msg_flags = 0;
#endif
+#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
+ nread = fuzz_recv(buffer, size);
+#else
nread = recvmsg(sock, &message, 0);
+#endif
if (nread == -1)
{
if (errno == EINTR)