Repository: thrift Updated Branches: refs/heads/master 64b8f6ca1 -> 30f465db9
THRIFT-3378 c_glib service does not handle negative Thrift byte values correctly This closes #644 Project: http://git-wip-us.apache.org/repos/asf/thrift/repo Commit: http://git-wip-us.apache.org/repos/asf/thrift/commit/30f465db Tree: http://git-wip-us.apache.org/repos/asf/thrift/tree/30f465db Diff: http://git-wip-us.apache.org/repos/asf/thrift/diff/30f465db Branch: refs/heads/master Commit: 30f465db92b95d6beedb8d5d056792a4e75f0158 Parents: 64b8f6c Author: Nobuaki Sukegawa <[email protected]> Authored: Sat Oct 10 10:45:42 2015 +0900 Committer: Roger Meier <[email protected]> Committed: Sun Oct 11 00:40:37 2015 +0200 ---------------------------------------------------------------------- compiler/cpp/src/generate/t_c_glib_generator.cc | 8 +++++++- test/c_glib/src/test_client.c | 16 ++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/thrift/blob/30f465db/compiler/cpp/src/generate/t_c_glib_generator.cc ---------------------------------------------------------------------- diff --git a/compiler/cpp/src/generate/t_c_glib_generator.cc b/compiler/cpp/src/generate/t_c_glib_generator.cc index 47aa4d2..bf5dc7d 100644 --- a/compiler/cpp/src/generate/t_c_glib_generator.cc +++ b/compiler/cpp/src/generate/t_c_glib_generator.cc @@ -2302,7 +2302,13 @@ void t_c_glib_generator::generate_service_processor(t_service* tservice) { // The handler reported success; return the result, if any, to the caller if (!(*function_iter)->is_oneway()) { if (has_return_value) { - f_service_ << indent() << "g_object_set (result_struct, \"success\", return_value, " + f_service_ << indent() << "g_object_set (result_struct, \"success\", "; + if (type_name(return_type) != property_type_name(return_type)) { + // Roundtrip cast to fix the position of sign bit. + f_service_ << "(" << property_type_name(return_type) << ")" + << "(" << type_name(return_type) << ")"; + } + f_service_ << "return_value, " << "NULL);" << endl; // Deallocate (or unref) return_value http://git-wip-us.apache.org/repos/asf/thrift/blob/30f465db/test/c_glib/src/test_client.c ---------------------------------------------------------------------- diff --git a/test/c_glib/src/test_client.c b/test/c_glib/src/test_client.c index fd429c8..0f8a713 100644 --- a/test/c_glib/src/test_client.c +++ b/test/c_glib/src/test_client.c @@ -356,6 +356,22 @@ main (int argc, char **argv) fail_count++; } + printf ("testByte(-1)"); + if (t_test_thrift_test_if_test_byte (test_client, + &byte, + -1, + &error)) { + printf (" = %d\n", byte); + if (byte != -1) + fail_count++; + } + else { + printf ("%s\n", error->message); + g_error_free (error); + error = NULL; + + fail_count++; + } /** * I32 TEST
