From d284493a63e676163584e1cc8be9fbe379d2e831 Mon Sep 17 00:00:00 2001
From: Yuchen Zeng <zyc@google.com>
Date: Tue, 9 Aug 2016 21:09:12 -0700
Subject: [PATCH] Fix asan issue, ignore invalid-source-encoding warning when
 building c-ares with clang

---
 Makefile                                      |  3 +-
 .../resolver/dns/c_ares/grpc_ares_wrapper.c   | 28 +++++++++----------
 templates/Makefile.template                   |  3 +-
 3 files changed, 18 insertions(+), 16 deletions(-)

diff --git a/Makefile b/Makefile
index 46bf013c34..f02511266f 100644
--- a/Makefile
+++ b/Makefile
@@ -676,6 +676,7 @@ ifeq ($(HAS_EMBEDDED_CARES),true)
 CARES_DEP = $(LIBDIR)/$(CONFIG)/c-ares/libcares.a
 CPPFLAGS := -Ithird_party/c-ares $(CPPFLAGS)
 LDFLAGS := -L$(LIBDIR)/$(CONFIG)/c-ares $(LDFLAGS)
+CARES_CFLAGS_EXTRA = -Wno-invalid-source-encoding
 else
 DEP_MISSING += c-ares
 endif
@@ -1242,7 +1243,7 @@ $(LIBDIR)/$(CONFIG)/protobuf/libprotobuf.a: third_party/protobuf/configure
 
 third_party/c-ares/configure:
 	$(E) "[AUTOGEN] Preparing c-ares"
-	$(Q)(cd third_party/c-ares; ./buildconf; CC="$(CC)" CXX="$(CXX)" LDFLAGS="$(LDFLAGS_$(CONFIG)) -g $(CARES_LDFLAGS_EXTRA)" CPPFLAGS="$(PIC_CPPFLAGS) $(CPPFLAGS_$(CONFIG)) -g $(CARES_CPPFLAGS_EXTRA)" ./configure)
+	$(Q)(cd third_party/c-ares; ./buildconf; CC="$(CC)" CXX="$(CXX)" LDFLAGS="$(LDFLAGS_$(CONFIG)) -g $(CARES_LDFLAGS_EXTRA)" CFLAGS="-g $(CARES_CFLAGS_EXTRA)" CPPFLAGS="$(PIC_CPPFLAGS) $(CPPFLAGS_$(CONFIG)) -g $(CARES_CPPFLAGS_EXTRA)" ./configure)
 
 $(LIBDIR)/$(CONFIG)/c-ares/libcares.a: third_party/c-ares/configure
 	$(E) "[MAKE]    Building c-ares"
diff --git a/src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.c b/src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.c
index 396a44b58c..73ef9f8191 100644
--- a/src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.c
+++ b/src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.c
@@ -221,6 +221,8 @@ grpc_ares_request *grpc_resolve_address_ares_impl(
   char *host;
   char *port;
   grpc_error *err;
+  grpc_ares_request *r = NULL;
+  grpc_ares_ev_driver *ev_driver;
 
   if ((err = grpc_customized_resolve_address(name, default_port, addrs)) !=
       GRPC_ERROR_CANCELLED) {
@@ -228,25 +230,12 @@ grpc_ares_request *grpc_resolve_address_ares_impl(
     return NULL;
   }
 
-  grpc_ares_request *r = gpr_malloc(sizeof(grpc_ares_request));
-  r->name = gpr_strdup(name);
-  r->default_port = gpr_strdup(default_port);
-  r->on_done = on_done;
-  r->addrs_out = addrs;
-  err = grpc_ares_ev_driver_create(&r->ev_driver, pollset_set);
-
-  if (err != GRPC_ERROR_NONE) {
-    grpc_exec_ctx_sched(exec_ctx, on_done, err, NULL);
-    return NULL;
-  }
-
-
   if (name[0] == 'u' && name[1] == 'n' && name[2] == 'i' && name[3] == 'x' &&
       name[4] == ':' && name[5] != 0) {
     grpc_exec_ctx_sched(exec_ctx, on_done,
                         grpc_resolve_unix_domain_address(name + 5, addrs),
                         NULL);
-    return r;
+    return NULL;
   }
 
   /* parse name, splitting it into host and port parts */
@@ -265,6 +254,17 @@ grpc_ares_request *grpc_resolve_address_ares_impl(
   } else if (try_fake_resolve(host, port, addrs)) {
     grpc_exec_ctx_sched(exec_ctx, on_done, GRPC_ERROR_NONE, NULL);
   } else {
+    err = grpc_ares_ev_driver_create(&ev_driver, pollset_set);
+    if (err != GRPC_ERROR_NONE) {
+      grpc_exec_ctx_sched(exec_ctx, on_done, err, NULL);
+      return NULL;
+    }
+    r = gpr_malloc(sizeof(grpc_ares_request));
+    r->ev_driver = ev_driver;
+    r->on_done = on_done;
+    r->addrs_out = addrs;
+    r->name = gpr_strdup(name);
+    r->default_port = gpr_strdup(default_port);
     r->port = gpr_strdup(port);
     r->host = gpr_strdup(host);
     grpc_closure_init(&r->request_closure, request_resolving_address, r);
diff --git a/templates/Makefile.template b/templates/Makefile.template
index 507e1f8293..19ba658095 100644
--- a/templates/Makefile.template
+++ b/templates/Makefile.template
@@ -564,6 +564,7 @@
   CARES_DEP = $(LIBDIR)/$(CONFIG)/c-ares/libcares.a
   CPPFLAGS := -Ithird_party/c-ares $(CPPFLAGS)
   LDFLAGS := -L$(LIBDIR)/$(CONFIG)/c-ares $(LDFLAGS)
+  CARES_CFLAGS_EXTRA = -Wno-invalid-source-encoding
   else
   DEP_MISSING += c-ares
   endif
@@ -884,7 +885,7 @@
 
   third_party/c-ares/configure:
   	$(E) "[AUTOGEN] Preparing c-ares"
-  	$(Q)(cd third_party/c-ares; ./buildconf; CC="$(CC)" CXX="$(CXX)" LDFLAGS="$(LDFLAGS_$(CONFIG)) -g $(CARES_LDFLAGS_EXTRA)" CPPFLAGS="$(PIC_CPPFLAGS) $(CPPFLAGS_$(CONFIG)) -g $(CARES_CPPFLAGS_EXTRA)" ./configure)
+  	$(Q)(cd third_party/c-ares; ./buildconf; CC="$(CC)" CXX="$(CXX)" LDFLAGS="$(LDFLAGS_$(CONFIG)) -g $(CARES_LDFLAGS_EXTRA)" CFLAGS="-g $(CARES_CFLAGS_EXTRA)" CPPFLAGS="$(PIC_CPPFLAGS) $(CPPFLAGS_$(CONFIG)) -g $(CARES_CPPFLAGS_EXTRA)" ./configure)
 
   $(LIBDIR)/$(CONFIG)/c-ares/libcares.a: third_party/c-ares/configure
   	$(E) "[MAKE]    Building c-ares"
-- 
GitLab