diff --git a/include/asterisk/dns_resolver.h b/include/asterisk/dns_resolver.h
index 819ce7a591027e8c3c15c7c4df37b6bc1cc31fc8..2d5f57f13d0cdd87948f0990af986f78890602e9 100644
--- a/include/asterisk/dns_resolver.h
+++ b/include/asterisk/dns_resolver.h
@@ -90,6 +90,10 @@ void *ast_dns_resolver_get_data(const struct ast_dns_query *query);
  * \param answer The raw DNS answer
  * \param answer_size The size of the raw DNS answer
  *
+ * Zero-sized and NULL answers are permitted by this function. This may be
+ * necessary if the query fails at an early stage and no actual DNS response
+ * has been received from a DNS server.
+ *
  * \retval 0 success
  * \retval -1 failure
  */
diff --git a/main/dns.c b/main/dns.c
index 409ed44ad909093af24bdca882c272b1d86ab928..e1b7770bf57d4eeb1234d49f82322bfb701927cc 100644
--- a/main/dns.c
+++ b/main/dns.c
@@ -559,6 +559,7 @@ enum ast_dns_search_result ast_search_dns_ex(void *context, const char *dname, i
 
 	if (dns_response_len < 0) {
 		ast_log(LOG_ERROR, "DNS search failed for %s\n", dname);
+		response_handler(context, (unsigned char *)"", 0, ns_r_nxdomain);
 		return AST_DNS_SEARCH_FAILURE;
 	}
 
diff --git a/main/dns_core.c b/main/dns_core.c
index 0b471db91867cb33175807c8223358901e39af35..cfce8efb084724f12cafe8139912445eae8ff86a 100644
--- a/main/dns_core.c
+++ b/main/dns_core.c
@@ -399,10 +399,10 @@ int ast_dns_resolver_set_result(struct ast_dns_query *query, unsigned int secure
 		return -1;
 	}
 
-	if (!answer || answer_size == 0) {
-		ast_debug(2, "Query '%p': Could not set result information since no DNS answer was provided\n",
-			query);
-		return -1;
+	if (!answer) {
+		answer = "";
+		answer_size = 0;
+		ast_debug(2, "Query '%p': Assuming zero-sized answer on NULL input\n", query);
 	}
 
 	ast_dns_result_free(query->result);
diff --git a/tests/test_dns.c b/tests/test_dns.c
index 4e2c4a4649ffd50cdefb4b06b872ac1c31e9293a..9bbb7daaf9469aef25dd56515797d762e5731820 100644
--- a/tests/test_dns.c
+++ b/tests/test_dns.c
@@ -365,9 +365,7 @@ AST_TEST_DEFINE(resolver_set_result_off_nominal)
 		info->description =
 			"This test performs the following:\n"
 			"\t* Attempt to add a DNS result that is both bogus and secure\n"
-			"\t* Attempt to add a DNS result that has no canonical name\n"
-			"\t* Attempt to add a DNS result that has no answer\n"
-			"\t* Attempt to add a DNS result with a zero answer size";
+			"\t* Attempt to add a DNS result that has no canonical name";
 		return AST_TEST_NOT_RUN;
 	case TEST_EXECUTE:
 		break;
@@ -391,22 +389,6 @@ AST_TEST_DEFINE(resolver_set_result_off_nominal)
 		return AST_TEST_FAIL;
 	}
 
-	if (!ast_dns_resolver_set_result(&some_query, 0, 0, ns_r_noerror, NULL,
-				NULL, DNS_ANSWER_SIZE)) {
-		ast_test_status_update(test, "Successfully added result with no answer\n");
-		result = ast_dns_query_get_result(&some_query);
-		ast_dns_result_free(result);
-		return AST_TEST_FAIL;
-	}
-
-	if (!ast_dns_resolver_set_result(&some_query, 0, 0, ns_r_noerror, NULL,
-				DNS_ANSWER, 0)) {
-		ast_test_status_update(test, "Successfully added result with answer size of zero\n");
-		result = ast_dns_query_get_result(&some_query);
-		ast_dns_result_free(result);
-		return AST_TEST_FAIL;
-	}
-
 	return AST_TEST_PASS;
 }