Skip to content

Commit 5d6851d

Browse files
iahsfacebook-github-bot
authored andcommitted
Support null bytes in definition keys
Summary: Since these are byte strings we have to handle the case where one of the bytes is zero Reviewed By: createdbysk Differential Revision: D67954736 fbshipit-source-id: 70e57eb1def45e40afa050935111cbed8d794071
1 parent 05392a8 commit 5d6851d

File tree

4 files changed

+9
-3
lines changed

4 files changed

+9
-3
lines changed

third-party/thrift/src/thrift/compiler/generate/t_mstch_cpp2_generator.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -824,6 +824,8 @@ class cpp_mstch_service : public mstch_service {
824824
&cpp_mstch_service::has_service_schema},
825825
{"service:reduced_client?", &cpp_mstch_service::reduced_client},
826826
{"service:definition_key", &cpp_mstch_service::definition_key},
827+
{"service:definition_key_length",
828+
&cpp_mstch_service::definition_key_length},
827829
});
828830

829831
const auto all_functions = mstch_service::get_functions();
@@ -910,6 +912,10 @@ class cpp_mstch_service : public mstch_service {
910912
schematizer s(*service_->program()->scope(), sm_, {});
911913
return escape_binary_string(s.identify_definition(*service_));
912914
}
915+
mstch::node definition_key_length() {
916+
schematizer s(*service_->program()->scope(), sm_, {});
917+
return escape_binary_string(s.identify_definition(*service_)).length();
918+
}
913919

914920
private:
915921
const std::vector<t_function*>& get_functions() const override {

third-party/thrift/src/thrift/compiler/generate/templates/cpp2/service_cpp/handlers_cpp.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ std::optional<apache::thrift::schema::DefinitionsSchema> {{> service_common/serv
3030
{{#program:has_schema?}}
3131
std::optional<apache::thrift::schema::DefinitionsSchema> ret = schema::DefinitionsSchema{};
3232
ret->schema = ::apache::thrift::SchemaRegistry::mergeSchemas(::{{service:qualified_namespace}}::{{program:name}}_constants::{{program:schema_name}}_includes());
33-
ret->definitions = {"{{service:definition_key}}"};
33+
ret->definitions = { {"{{service:definition_key}}", {{service:definition_key_length}}} };
3434
return ret;
3535
{{/program:has_schema?}}
3636
{{^program:has_schema?}}

third-party/thrift/src/thrift/compiler/test/fixtures/service-schema/out/cpp2/gen-cpp2/PrimitivesService.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ apache::thrift::ServiceHandler<::cpp2::PrimitivesService>::CreateMethodMetadataR
2323
std::optional<apache::thrift::schema::DefinitionsSchema> apache::thrift::ServiceHandler<::cpp2::PrimitivesService>::getServiceSchema() {
2424
std::optional<apache::thrift::schema::DefinitionsSchema> ret = schema::DefinitionsSchema{};
2525
ret->schema = ::apache::thrift::SchemaRegistry::mergeSchemas(::cpp2::module_constants::_fbthrift_schema_b747839c13cb3aa5_includes());
26-
ret->definitions = {"\x0d\x05\x1d\xbc\xb2\xd5\x1d\x8f\x95\x45\xbb\x51\xfa\xcf\x0f\xfe"};
26+
ret->definitions = { {"\x0d\x05\x1d\xbc\xb2\xd5\x1d\x8f\x95\x45\xbb\x51\xfa\xcf\x0f\xfe", 64} };
2727
return ret;
2828
}
2929
#endif

third-party/thrift/src/thrift/compiler/test/fixtures/service-schema/out/cpp2_sinit/gen-cpp2/PrimitivesService.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ apache::thrift::ServiceHandler<::cpp2::PrimitivesService>::CreateMethodMetadataR
2323
std::optional<apache::thrift::schema::DefinitionsSchema> apache::thrift::ServiceHandler<::cpp2::PrimitivesService>::getServiceSchema() {
2424
std::optional<apache::thrift::schema::DefinitionsSchema> ret = schema::DefinitionsSchema{};
2525
ret->schema = ::apache::thrift::SchemaRegistry::mergeSchemas(::cpp2::module_constants::_fbthrift_schema_b747839c13cb3aa5_includes());
26-
ret->definitions = {"\x0d\x05\x1d\xbc\xb2\xd5\x1d\x8f\x95\x45\xbb\x51\xfa\xcf\x0f\xfe"};
26+
ret->definitions = { {"\x0d\x05\x1d\xbc\xb2\xd5\x1d\x8f\x95\x45\xbb\x51\xfa\xcf\x0f\xfe", 64} };
2727
return ret;
2828
}
2929
#endif

0 commit comments

Comments
 (0)