From 7af7e3ec5bd24b0ae0d7969809772b606f1eb377 Mon Sep 17 00:00:00 2001 From: "R. Tyler Croy" Date: Wed, 10 Sep 2014 19:59:21 -0700 Subject: [PATCH] Avoid call to rb_string_value_cstr() which doesn't handle binary strings from Ruby properly Fixes #32 --- ext/hermann/hermann_lib.c | 4 +++- spec/hermann_lib/producer_spec.rb | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ext/hermann/hermann_lib.c b/ext/hermann/hermann_lib.c index 4140dfc..4aafa9d 100644 --- a/ext/hermann/hermann_lib.c +++ b/ext/hermann/hermann_lib.c @@ -573,11 +573,13 @@ static VALUE producer_push_single(VALUE self, VALUE message, VALUE result) { TRACER("setting result: %p\n", result); } + TRACER("rd_kafka_produce() message of %i bytes\n", RSTRING_LEN(message)); + /* Send/Produce message. */ if (-1 == rd_kafka_produce(producerConfig->rkt, producerConfig->partition, RD_KAFKA_MSG_F_COPY, - rb_string_value_cstr(&message), + RSTRING_PTR(message), RSTRING_LEN(message), NULL, 0, diff --git a/spec/hermann_lib/producer_spec.rb b/spec/hermann_lib/producer_spec.rb index 8dd2c33..4643417 100644 --- a/spec/hermann_lib/producer_spec.rb +++ b/spec/hermann_lib/producer_spec.rb @@ -68,7 +68,7 @@ describe Hermann::Lib::Producer do end context 'with binary data' do - let(:message) { "\n+AuOzetQrTrdwSY14ig7I_1oUwjp3DvTx3YWhSTGD4Fo\022\0312014-09-10T00:18:47-07:00\032,\n\006scream\022\016missing_device\032\022app0\"\t\n\astarted*(\b\000\022$009f0305-b50a-455d-b137-e52b45f674aa*(\b\001\022$53c0d817-d94b-4b7a-9a58-95fe8cec4333" } + let(:message) { "\n+AuOzetQrTrdwSY14ig7I_1oUwjp3DvTx3YWhSTGD4Fo\022\0312014-09-10T00:18:47-07:00\032,\n\006scream\022\016missing_device\032\022flexd-today-0-app0\"\t\n\astarted*(\b\000\022$009f0305-b50a-455d-b137-e52b45f674aa*(\b\001\022$53c0d817-d94b-4b7a-9a58-95fe8cec4333" } it 'should return' do expect(push).not_to be_nil