You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by je...@apache.org on 2017/03/27 20:51:00 UTC
thrift git commit: THRIFT-4137 Fix remaining undefined behavior
invalid vptr casts in Thrift Compiler
Repository: thrift
Updated Branches:
refs/heads/master 9a8d576c8 -> 7470995ce
THRIFT-4137 Fix remaining undefined behavior invalid vptr casts in Thrift Compiler
Project: http://git-wip-us.apache.org/repos/asf/thrift/repo
Commit: http://git-wip-us.apache.org/repos/asf/thrift/commit/7470995c
Tree: http://git-wip-us.apache.org/repos/asf/thrift/tree/7470995c
Diff: http://git-wip-us.apache.org/repos/asf/thrift/diff/7470995c
Branch: refs/heads/master
Commit: 7470995ce4bb480a86beaf1d8babce95c6f4b8c7
Parents: 9a8d576
Author: Jens Geyer <je...@apache.org>
Authored: Sun Mar 26 14:52:35 2017 +0200
Committer: Jens Geyer <je...@apache.org>
Committed: Mon Mar 27 22:50:16 2017 +0200
----------------------------------------------------------------------
compiler/cpp/src/thrift/generate/t_haxe_generator.cc | 2 +-
compiler/cpp/src/thrift/generate/t_java_generator.cc | 4 ++--
compiler/cpp/src/thrift/generate/t_json_generator.cc | 6 +++++-
compiler/cpp/src/thrift/generate/t_xml_generator.cc | 7 ++++++-
compiler/cpp/src/thrift/parse/t_scope.h | 9 ++++++++-
5 files changed, 22 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/thrift/blob/7470995c/compiler/cpp/src/thrift/generate/t_haxe_generator.cc
----------------------------------------------------------------------
diff --git a/compiler/cpp/src/thrift/generate/t_haxe_generator.cc b/compiler/cpp/src/thrift/generate/t_haxe_generator.cc
index f5d292f..4de4307 100644
--- a/compiler/cpp/src/thrift/generate/t_haxe_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_haxe_generator.cc
@@ -2573,7 +2573,7 @@ string t_haxe_generator::type_name(t_type* ttype, bool in_container, bool in_ini
}
if (ttype->is_set()) {
- t_type* tkey = get_true_type(((t_list*)ttype)->get_elem_type());
+ t_type* tkey = get_true_type(((t_set*)ttype)->get_elem_type());
if (tkey->is_base_type()) {
t_base_type::t_base tbase = ((t_base_type*)tkey)->get_base();
switch (tbase) {
http://git-wip-us.apache.org/repos/asf/thrift/blob/7470995c/compiler/cpp/src/thrift/generate/t_java_generator.cc
----------------------------------------------------------------------
diff --git a/compiler/cpp/src/thrift/generate/t_java_generator.cc b/compiler/cpp/src/thrift/generate/t_java_generator.cc
index db70dc5..80b8eef 100644
--- a/compiler/cpp/src/thrift/generate/t_java_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_java_generator.cc
@@ -2685,7 +2685,7 @@ void t_java_generator::generate_field_value_meta_data(std::ofstream& out, t_type
} else if (type->is_set()) {
indent(out)
<< "new org.apache.thrift.meta_data.SetMetaData(org.apache.thrift.protocol.TType.SET, ";
- t_type* elem_type = ((t_list*)type)->get_elem_type();
+ t_type* elem_type = ((t_set*)type)->get_elem_type();
generate_field_value_meta_data(out, elem_type);
} else { // map
indent(out)
@@ -3748,7 +3748,7 @@ void t_java_generator::generate_deserialize_container(ofstream& out,
} else if (ttype->is_list()) {
indent(out) << "org.apache.thrift.protocol.TList " << obj
<< " = new org.apache.thrift.protocol.TList("
- << type_to_enum(((t_set*)ttype)->get_elem_type()) << ", iprot.readI32());"
+ << type_to_enum(((t_list*)ttype)->get_elem_type()) << ", iprot.readI32());"
<< endl;
}
}
http://git-wip-us.apache.org/repos/asf/thrift/blob/7470995c/compiler/cpp/src/thrift/generate/t_json_generator.cc
----------------------------------------------------------------------
diff --git a/compiler/cpp/src/thrift/generate/t_json_generator.cc b/compiler/cpp/src/thrift/generate/t_json_generator.cc
index 36e9216..f3d67e0 100644
--- a/compiler/cpp/src/thrift/generate/t_json_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_json_generator.cc
@@ -273,10 +273,14 @@ void t_json_generator::write_type_spec(t_type* ttype) {
write_key_and_string("valueTypeId", get_type_name(vtype));
write_type_spec_object("keyType", ktype);
write_type_spec_object("valueType", vtype);
- } else if (ttype->is_list() || ttype->is_set()) {
+ } else if (ttype->is_list()) {
t_type* etype = ((t_list*)ttype)->get_elem_type();
write_key_and_string("elemTypeId", get_type_name(etype));
write_type_spec_object("elemType", etype);
+ } else if (ttype->is_set()) {
+ t_type* etype = ((t_set*)ttype)->get_elem_type();
+ write_key_and_string("elemTypeId", get_type_name(etype));
+ write_type_spec_object("elemType", etype);
}
}
http://git-wip-us.apache.org/repos/asf/thrift/blob/7470995c/compiler/cpp/src/thrift/generate/t_xml_generator.cc
----------------------------------------------------------------------
diff --git a/compiler/cpp/src/thrift/generate/t_xml_generator.cc b/compiler/cpp/src/thrift/generate/t_xml_generator.cc
index b35f351..e7e01fd 100644
--- a/compiler/cpp/src/thrift/generate/t_xml_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_xml_generator.cc
@@ -391,11 +391,16 @@ void t_xml_generator::write_type(t_type* ttype) {
if (type == "id") {
write_attribute("type-module", ttype->get_program()->get_name());
write_attribute("type-id", ttype->get_name());
- } else if (type == "list" || type == "set") {
+ } else if (type == "list") {
t_type* etype = ((t_list*)ttype)->get_elem_type();
write_element_start("elemType");
write_type(etype);
write_element_end();
+ } else if (type == "set") {
+ t_type* etype = ((t_set*)ttype)->get_elem_type();
+ write_element_start("elemType");
+ write_type(etype);
+ write_element_end();
} else if (type == "map") {
t_type* ktype = ((t_map*)ttype)->get_key_type();
write_element_start("keyType");
http://git-wip-us.apache.org/repos/asf/thrift/blob/7470995c/compiler/cpp/src/thrift/parse/t_scope.h
----------------------------------------------------------------------
diff --git a/compiler/cpp/src/thrift/parse/t_scope.h b/compiler/cpp/src/thrift/parse/t_scope.h
index e196200..02aa550 100644
--- a/compiler/cpp/src/thrift/parse/t_scope.h
+++ b/compiler/cpp/src/thrift/parse/t_scope.h
@@ -31,6 +31,7 @@
#include "thrift/parse/t_base_type.h"
#include "thrift/parse/t_map.h"
#include "thrift/parse/t_list.h"
+#include "thrift/parse/t_set.h"
namespace plugin_output {
template <typename From, typename To>
@@ -81,12 +82,18 @@ public:
resolve_const_value(v_iter->first, ((t_map*)ttype)->get_key_type());
resolve_const_value(v_iter->second, ((t_map*)ttype)->get_val_type());
}
- } else if (ttype->is_list() || ttype->is_set()) {
+ } else if (ttype->is_list()) {
const std::vector<t_const_value*>& val = const_val->get_list();
std::vector<t_const_value*>::const_iterator v_iter;
for (v_iter = val.begin(); v_iter != val.end(); ++v_iter) {
resolve_const_value((*v_iter), ((t_list*)ttype)->get_elem_type());
}
+ } else if (ttype->is_set()) {
+ const std::vector<t_const_value*>& val = const_val->get_list();
+ std::vector<t_const_value*>::const_iterator v_iter;
+ for (v_iter = val.begin(); v_iter != val.end(); ++v_iter) {
+ resolve_const_value((*v_iter), ((t_set*)ttype)->get_elem_type());
+ }
} else if (ttype->is_struct()) {
t_struct* tstruct = (t_struct*)ttype;
const std::map<t_const_value*, t_const_value*>& map = const_val->get_map();