diff options
author | Yang Gao <yangg@google.com> | 2016-01-27 16:18:50 -0800 |
---|---|---|
committer | Yang Gao <yangg@google.com> | 2016-01-27 16:18:50 -0800 |
commit | bdaea02205251ddbd85e354f0dcda7cbb87ff123 (patch) | |
tree | e6938b14e75f046e37dfc29b4cc7df49a492f877 | |
parent | d991735cb1faf4bbed652143b75c9a2aae3fffb9 (diff) | |
parent | b9c5505c4a88c633044e645c3bd92eeb362b11c7 (diff) |
Merge pull request #4927 from ctiller/fix-undefined-behavior
Fix undefined behavior
-rw-r--r-- | src/core/client_config/subchannel.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/core/client_config/subchannel.c b/src/core/client_config/subchannel.c index 748eef9bed..fccc1dda54 100644 --- a/src/core/client_config/subchannel.c +++ b/src/core/client_config/subchannel.c @@ -284,9 +284,13 @@ grpc_subchannel *grpc_subchannel_create(grpc_connector *connector, c->connector = connector; grpc_connector_ref(c->connector); c->num_filters = args->filter_count; - c->filters = gpr_malloc(sizeof(grpc_channel_filter *) * c->num_filters); - memcpy((void *)c->filters, args->filters, - sizeof(grpc_channel_filter *) * c->num_filters); + if (c->num_filters > 0) { + c->filters = gpr_malloc(sizeof(grpc_channel_filter *) * c->num_filters); + memcpy((void *)c->filters, args->filters, + sizeof(grpc_channel_filter *) * c->num_filters); + } else { + c->filters = NULL; + } c->addr = gpr_malloc(args->addr_len); memcpy(c->addr, args->addr, args->addr_len); grpc_pollset_set_init(&c->pollset_set); @@ -483,7 +487,9 @@ static void publish_transport(grpc_exec_ctx *exec_ctx, grpc_subchannel *c) { /* build final filter list */ num_filters = c->num_filters + c->connecting_result.num_filters + 1; filters = gpr_malloc(sizeof(*filters) * num_filters); - memcpy((void *)filters, c->filters, sizeof(*filters) * c->num_filters); + if (c->num_filters > 0) { + memcpy((void *)filters, c->filters, sizeof(*filters) * c->num_filters); + } memcpy((void *)(filters + c->num_filters), c->connecting_result.filters, sizeof(*filters) * c->connecting_result.num_filters); filters[num_filters - 1] = &grpc_connected_channel_filter; |