rb: Teach BinaryProtocolAccelerated to encode strings with NULs [THRIFT-97]
This patch adds a spec and fixes the behavior to properly treat strings as binary
blobs of data instead of as C strings when writing to the transport.
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@679899 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/rb/ext/binaryprotocolaccelerated.c b/lib/rb/ext/binaryprotocolaccelerated.c
index 31e969e..6e295ed 100644
--- a/lib/rb/ext/binaryprotocolaccelerated.c
+++ b/lib/rb/ext/binaryprotocolaccelerated.c
@@ -259,10 +259,9 @@
write_i64(buf, transfer.t);
}
-static void write_string(VALUE buf, char* str) {
- int32_t len = strlen(str);
+static void write_string(VALUE buf, char* str, size_t len) {
write_i32(buf, len);
- rb_str_buf_cat2(buf, str);
+ rb_str_buf_cat(buf, str, len);
}
// Some functions macro'd out because they're nops for the binary protocol
@@ -473,7 +472,7 @@
break;
case T_STR:
- write_string(buf, StringValuePtr(obj));
+ write_string(buf, StringValuePtr(obj), RSTRING(obj)->len);
break;
case T_STRCT: {