Fix handling of slice in http_client_filter

pull/10664/head
David Garcia Quintas 8 years ago
parent b9f9dcdec0
commit 2f4679ea34
  1. 6
      include/grpc/slice.h
  2. 4
      src/core/ext/filters/http/client/http_client_filter.c

@ -102,9 +102,9 @@ GPRAPI grpc_slice grpc_slice_from_static_string(const char *source);
/* Create a slice pointing to constant memory */ /* Create a slice pointing to constant memory */
GPRAPI grpc_slice grpc_slice_from_static_buffer(const void *source, size_t len); GPRAPI grpc_slice grpc_slice_from_static_buffer(const void *source, size_t len);
/* Return a result slice derived from s, which shares a ref count with s, where /* Return a result slice derived from s, which shares a ref count with \a s,
result.data==s.data+begin, and result.length==end-begin. where result.data==s.data+begin, and result.length==end-begin. The ref count
The ref count of s is increased by one. of \a s is increased by one. Do not assign result back to \a s.
Requires s initialized, begin <= end, begin <= s.length, and Requires s initialized, begin <= end, begin <= s.length, and
end <= source->length. */ end <= source->length. */
GPRAPI grpc_slice grpc_slice_sub(grpc_slice s, size_t begin, size_t end); GPRAPI grpc_slice grpc_slice_sub(grpc_slice s, size_t begin, size_t end);

@ -313,7 +313,6 @@ static grpc_error *hc_mutate_op(grpc_exec_ctx *exec_ctx,
estimated_len += grpc_base64_estimate_encoded_size( estimated_len += grpc_base64_estimate_encoded_size(
op->payload->send_message.send_message->length, k_url_safe, op->payload->send_message.send_message->length, k_url_safe,
k_multi_line); k_multi_line);
estimated_len += 1; /* for the trailing 0 */
grpc_slice path_with_query_slice = grpc_slice_malloc(estimated_len); grpc_slice path_with_query_slice = grpc_slice_malloc(estimated_len);
/* memcopy individual pieces into this slice */ /* memcopy individual pieces into this slice */
@ -335,7 +334,7 @@ static grpc_error *hc_mutate_op(grpc_exec_ctx *exec_ctx,
char *t = (char *)GRPC_SLICE_START_PTR(path_with_query_slice); char *t = (char *)GRPC_SLICE_START_PTR(path_with_query_slice);
/* safe to use strlen since base64_encode will always add '\0' */ /* safe to use strlen since base64_encode will always add '\0' */
path_with_query_slice = path_with_query_slice =
grpc_slice_sub(path_with_query_slice, 0, strlen(t)); grpc_slice_sub_no_ref(path_with_query_slice, 0, strlen(t));
/* substitute previous path with the new path+query */ /* substitute previous path with the new path+query */
grpc_mdelem mdelem_path_and_query = grpc_mdelem_from_slices( grpc_mdelem mdelem_path_and_query = grpc_mdelem_from_slices(
@ -349,7 +348,6 @@ static grpc_error *hc_mutate_op(grpc_exec_ctx *exec_ctx,
calld->on_complete = op->on_complete; calld->on_complete = op->on_complete;
op->on_complete = &calld->hc_on_complete; op->on_complete = &calld->hc_on_complete;
op->send_message = false; op->send_message = false;
grpc_slice_unref_internal(exec_ctx, path_with_query_slice);
} else { } else {
/* Not all data is available. Fall back to POST. */ /* Not all data is available. Fall back to POST. */
gpr_log(GPR_DEBUG, gpr_log(GPR_DEBUG,

Loading…
Cancel
Save