Skip to content

Commit 346cfc6

Browse files
authored
[cpp-restsdk] fix crashes and constness (#5123)
* []c++[cpprest]fix some constness and invalid access to null entities * update petstore sample
1 parent 5a5c3db commit 346cfc6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+179
-160
lines changed

modules/openapi-generator/src/main/resources/cpp-rest-sdk-client/api-header.mustache

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public:
3535
{{#allParams}}
3636
{{^required}}boost::optional<{{/required}}{{#isFile}}std::shared_ptr<{{/isFile}}{{{dataType}}}{{#isFile}}>{{/isFile}}{{^required}}>{{/required}} {{paramName}}{{#hasMore}},{{/hasMore}}
3737
{{/allParams}}
38-
) = 0;
38+
) const = 0;
3939
{{/operation}}
4040
};{{/gmockApis}}
4141

@@ -46,7 +46,7 @@ public:
4646
using Base = I{{classname}};
4747
{{/gmockApis}}
4848

49-
explicit {{classname}}( std::shared_ptr<ApiClient> apiClient );
49+
explicit {{classname}}( std::shared_ptr<const ApiClient> apiClient );
5050

5151
{{#gmockApis}}
5252
~{{classname}}() override;
@@ -69,11 +69,11 @@ public:
6969
{{#allParams}}
7070
{{^required}}boost::optional<{{/required}}{{#isFile}}std::shared_ptr<{{/isFile}}{{{dataType}}}{{#isFile}}>{{/isFile}}{{^required}}>{{/required}} {{paramName}}{{#hasMore}},{{/hasMore}}
7171
{{/allParams}}
72-
){{#gmockApis}} override{{/gmockApis}};
72+
) const{{#gmockApis}} override{{/gmockApis}};
7373
{{/operation}}
7474

7575
protected:
76-
std::shared_ptr<ApiClient> m_ApiClient;
76+
std::shared_ptr<const ApiClient> m_ApiClient;
7777
};
7878

7979
{{#apiNamespaceDeclarations}}

modules/openapi-generator/src/main/resources/cpp-rest-sdk-client/api-source.mustache

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ namespace {{this}} {
1616

1717
using namespace {{modelNamespace}};
1818

19-
{{classname}}::{{classname}}( std::shared_ptr<ApiClient> apiClient )
19+
{{classname}}::{{classname}}( std::shared_ptr<const ApiClient> apiClient )
2020
: m_ApiClient(apiClient)
2121
{
2222
}
@@ -26,7 +26,7 @@ using namespace {{modelNamespace}};
2626
}
2727

2828
{{#operation}}
29-
pplx::task<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}> {{classname}}::{{operationId}}({{#allParams}}{{^required}}boost::optional<{{/required}}{{#isFile}}std::shared_ptr<{{/isFile}}{{{dataType}}}{{#isFile}}>{{/isFile}}{{^required}}>{{/required}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}})
29+
pplx::task<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}> {{classname}}::{{operationId}}({{#allParams}}{{^required}}boost::optional<{{/required}}{{#isFile}}std::shared_ptr<{{/isFile}}{{{dataType}}}{{#isFile}}>{{/isFile}}{{^required}}>{{/required}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) const
3030
{
3131
{{#allParams}}{{#required}}{{^isPrimitiveType}}{{^isContainer}}
3232
// verify the required parameter '{{paramName}}' is set
@@ -36,7 +36,7 @@ pplx::task<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/r
3636
}
3737
{{/isContainer}}{{/isPrimitiveType}}{{/required}}{{/allParams}}
3838

39-
std::shared_ptr<ApiConfiguration> localVarApiConfiguration( m_ApiClient->getConfiguration() );
39+
std::shared_ptr<const ApiConfiguration> localVarApiConfiguration( m_ApiClient->getConfiguration() );
4040
utility::string_t localVarPath = utility::conversions::to_string_t("{{{path}}}");
4141
{{#pathParams}}boost::replace_all(localVarPath, utility::conversions::to_string_t("{") + utility::conversions::to_string_t("{{baseName}}") + utility::conversions::to_string_t("}"), ApiClient::parameterToString({{{paramName}}}));
4242
{{/pathParams}}

modules/openapi-generator/src/main/resources/cpp-rest-sdk-client/apiclient-header.mustache

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,16 @@ using namespace {{modelNamespace}};
3434
class {{declspec}} ApiClient
3535
{
3636
public:
37-
ApiClient( std::shared_ptr<ApiConfiguration> configuration = nullptr );
37+
ApiClient( std::shared_ptr<const ApiConfiguration> configuration = nullptr );
3838
virtual ~ApiClient();
3939
4040
typedef std::function<void(web::http::status_code, const web::http::http_headers&)> ResponseHandlerType;
4141
4242
const ResponseHandlerType& getResponseHandler() const;
4343
void setResponseHandler(const ResponseHandlerType& responseHandler);
4444
45-
std::shared_ptr<ApiConfiguration> getConfiguration() const;
46-
void setConfiguration(std::shared_ptr<ApiConfiguration> configuration);
45+
std::shared_ptr<const ApiConfiguration> getConfiguration() const;
46+
void setConfiguration(std::shared_ptr<const ApiConfiguration> configuration);
4747
4848
static utility::string_t parameterToString(utility::string_t value);
4949
static utility::string_t parameterToString(int32_t value);
@@ -70,7 +70,7 @@ public:
7070
protected:
7171
7272
ResponseHandlerType m_ResponseHandler;
73-
std::shared_ptr<ApiConfiguration> m_Configuration;
73+
std::shared_ptr<const ApiConfiguration> m_Configuration;
7474
};
7575

7676
template<class T>

modules/openapi-generator/src/main/resources/cpp-rest-sdk-client/apiclient-source.mustache

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ namespace {{this}} {
2121

2222
using namespace {{modelNamespace}};
2323

24-
ApiClient::ApiClient(std::shared_ptr<ApiConfiguration> configuration )
24+
ApiClient::ApiClient(std::shared_ptr<const ApiConfiguration> configuration )
2525
: m_Configuration(configuration)
2626
{
2727
}
@@ -37,11 +37,11 @@ void ApiClient::setResponseHandler(const ResponseHandlerType& responseHandler) {
3737
m_ResponseHandler = responseHandler;
3838
}
3939

40-
std::shared_ptr<ApiConfiguration> ApiClient::getConfiguration() const
40+
std::shared_ptr<const ApiConfiguration> ApiClient::getConfiguration() const
4141
{
4242
return m_Configuration;
4343
}
44-
void ApiClient::setConfiguration(std::shared_ptr<ApiConfiguration> configuration)
44+
void ApiClient::setConfiguration(std::shared_ptr<const ApiConfiguration> configuration)
4545
{
4646
m_Configuration = configuration;
4747
}
@@ -108,26 +108,26 @@ pplx::task<web::http::http_response> ApiClient::callApi(
108108
web::http::client::http_client client(m_Configuration->getBaseUrl(), m_Configuration->getHttpConfig());
109109

110110
web::http::http_request request;
111-
for ( auto& kvp : headerParams )
111+
for (const auto& kvp : headerParams)
112112
{
113113
request.headers().add(kvp.first, kvp.second);
114114
}
115115

116116
if (fileParams.size() > 0)
117117
{
118118
MultipartFormData uploadData;
119-
for (auto& kvp : formParams)
119+
for (const auto& kvp : formParams)
120120
{
121121
uploadData.add(ModelBase::toHttpContent(kvp.first, kvp.second));
122122
}
123-
for (auto& kvp : fileParams)
123+
for (const auto& kvp : fileParams)
124124
{
125125
uploadData.add(ModelBase::toHttpContent(kvp.first, kvp.second));
126126
}
127127
std::stringstream data;
128128
uploadData.writeTo(data);
129129
auto bodyString = data.str();
130-
auto length = bodyString.size();
130+
const auto length = bodyString.size();
131131
request.set_body(concurrency::streams::bytestream::open_istream(std::move(bodyString)), length, utility::conversions::to_string_t("multipart/form-data; boundary=") + uploadData.getBoundary());
132132
}
133133
else
@@ -137,7 +137,7 @@ pplx::task<web::http::http_response> ApiClient::callApi(
137137
std::stringstream data;
138138
postBody->writeTo(data);
139139
auto bodyString = data.str();
140-
auto length = bodyString.size();
140+
const auto length = bodyString.size();
141141
request.set_body(concurrency::streams::bytestream::open_istream(std::move(bodyString)), length, contentType);
142142
}
143143
else
@@ -157,7 +157,7 @@ pplx::task<web::http::http_response> ApiClient::callApi(
157157
else
158158
{
159159
web::http::uri_builder formData;
160-
for (auto& kvp : formParams)
160+
for (const auto& kvp : formParams)
161161
{
162162
formData.append_query(kvp.first, kvp.second);
163163
}
@@ -170,7 +170,7 @@ pplx::task<web::http::http_response> ApiClient::callApi(
170170
}
171171

172172
web::http::uri_builder builder(path);
173-
for (auto& kvp : queryParams)
173+
for (const auto& kvp : queryParams)
174174
{
175175
builder.append_query(kvp.first, kvp.second);
176176
}

modules/openapi-generator/src/main/resources/cpp-rest-sdk-client/apiconfiguration-header.mustache

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public:
2424
ApiConfiguration();
2525
virtual ~ApiConfiguration();
2626
27-
web::http::client::http_client_config& getHttpConfig();
27+
const web::http::client::http_client_config& getHttpConfig() const;
2828
void setHttpConfig( web::http::client::http_client_config& value );
2929
3030
utility::string_t getBaseUrl() const;
@@ -34,6 +34,7 @@ public:
3434
void setUserAgent( const utility::string_t value );
3535
3636
std::map<utility::string_t, utility::string_t>& getDefaultHeaders();
37+
const std::map<utility::string_t, utility::string_t>& getDefaultHeaders() const;
3738
3839
utility::string_t getApiKey( const utility::string_t& prefix) const;
3940
void setApiKey( const utility::string_t& prefix, const utility::string_t& apiKey );

modules/openapi-generator/src/main/resources/cpp-rest-sdk-client/apiconfiguration-source.mustache

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ ApiConfiguration::~ApiConfiguration()
1313
{
1414
}
1515

16-
web::http::client::http_client_config& ApiConfiguration::getHttpConfig()
16+
const web::http::client::http_client_config& ApiConfiguration::getHttpConfig() const
1717
{
1818
return m_HttpConfig;
1919
}
@@ -48,6 +48,11 @@ std::map<utility::string_t, utility::string_t>& ApiConfiguration::getDefaultHead
4848
return m_DefaultHeaders;
4949
}
5050

51+
const std::map<utility::string_t, utility::string_t>& ApiConfiguration::getDefaultHeaders() const
52+
{
53+
return m_DefaultHeaders;
54+
}
55+
5156
utility::string_t ApiConfiguration::getApiKey( const utility::string_t& prefix) const
5257
{
5358
auto result = m_ApiKeys.find(prefix);

modules/openapi-generator/src/main/resources/cpp-rest-sdk-client/model-source.mustache

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ void {{classname}}::fromJson(const web::json::value& val)
265265
}
266266
else
267267
{
268-
{{{items.datatype}}} newItem({{{items.defaultValue}}});
268+
auto newItem = std::make_shared<{{{items.datatype}}}::element_type>();
269269
newItem->fromJson(item);
270270
m_{{name}}.push_back( newItem );
271271
}
@@ -309,7 +309,7 @@ void {{classname}}::fromJson(const web::json::value& val)
309309
}
310310
else
311311
{
312-
{{{items.datatype}}} newItem({{{items.defaultValue}}});
312+
auto newItem = std::make_shared<{{{items.datatype}}}::element_type>();
313313
newItem->fromJson(item.at(utility::conversions::to_string_t("value")));
314314
m_{{name}}.insert(std::pair<utility::string_t,{{{items.datatype}}}>( key, newItem ));
315315
}
@@ -344,7 +344,7 @@ void {{classname}}::fromJson(const web::json::value& val)
344344
{{/isDateTime}}
345345
{{^isDateTime}}
346346
{{^isByteArray}}
347-
{{{dataType}}} newItem({{{defaultValue}}});
347+
auto newItem = std::make_shared<{{{datatype}}}::element_type>();
348348
newItem->fromJson(fieldValue);
349349
{{setter}}( newItem );
350350
{{/isByteArray}}
@@ -371,7 +371,7 @@ void {{classname}}::fromJson(const web::json::value& val)
371371
{{setter}}(ModelBase::fileFromJson(val.at(utility::conversions::to_string_t("{{baseName}}"))));
372372
{{/vendorExtensions.x-codegen-file}}
373373
{{^vendorExtensions.x-codegen-file}}
374-
{{{dataType}}} new{{name}}({{{defaultValue}}});
374+
auto new{{name}} = std::make_shared<{{{dataType}}}::element_type>();
375375
new{{name}}->fromJson(val.at(utility::conversions::to_string_t("{{baseName}}")));
376376
{{setter}}( new{{name}} );
377377
{{/vendorExtensions.x-codegen-file}}
@@ -553,7 +553,7 @@ void {{classname}}::fromMultiPart(std::shared_ptr<MultipartFormData> multipart,
553553
}
554554
else
555555
{
556-
{{{items.datatype}}} newItem({{{items.defaultValue}}});
556+
auto newItem = std::make_shared<{{{items.datatype}}}::element_type>();
557557
newItem->fromJson(item);
558558
m_{{name}}.push_back( newItem );
559559
}
@@ -600,7 +600,7 @@ void {{classname}}::fromMultiPart(std::shared_ptr<MultipartFormData> multipart,
600600
}
601601
else
602602
{
603-
{{{items.datatype}}} newItem({{{items.defaultValue}}});
603+
auto newItem = std::make_shared<{{{items.datatype}}}::element_type>();
604604
newItem->fromJson(item[utility::conversions::to_string_t("value")]);
605605
m_{{name}}.insert(std::pair<utility::string_t,{{{items.datatype}}}>( key, newItem ));
606606
}
@@ -633,7 +633,7 @@ void {{classname}}::fromMultiPart(std::shared_ptr<MultipartFormData> multipart,
633633
{{^isDateTime}}
634634
if(multipart->hasContent(utility::conversions::to_string_t("{{baseName}}")))
635635
{
636-
{{{dataType}}} newItem({{{defaultValue}}});
636+
auto newItem = std::make_shared<{{{datatype}}}::element_type>();
637637
newItem->fromMultiPart(multipart, utility::conversions::to_string_t("{{baseName}}."));
638638
{{setter}}( newItem );
639639
}
@@ -659,7 +659,7 @@ void {{classname}}::fromMultiPart(std::shared_ptr<MultipartFormData> multipart,
659659
{{setter}}(multipart->getContent(utility::conversions::to_string_t("{{baseName}}")));
660660
{{/vendorExtensions.x-codegen-file}}
661661
{{^vendorExtensions.x-codegen-file}}
662-
{{{dataType}}} new{{name}}({{{defaultValue}}});
662+
auto new{{name}} = std::make_shared<{{{dataType}}}::element_type>();
663663
new{{name}}->fromMultiPart(multipart, utility::conversions::to_string_t("{{baseName}}."));
664664
{{setter}}( new{{name}} );
665665
{{/vendorExtensions.x-codegen-file}}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
4.1.0-SNAPSHOT
1+
4.2.3-SNAPSHOT

samples/client/petstore/cpp-restsdk/client/ApiClient.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*
55
* The version of the OpenAPI document: 1.0.0
66
*
7-
* NOTE: This class is auto generated by OpenAPI-Generator 4.1.3-SNAPSHOT.
7+
* NOTE: This class is auto generated by OpenAPI-Generator 4.2.3-SNAPSHOT.
88
* https://openapi-generator.tech
99
* Do not edit the class manually.
1010
*/
@@ -32,7 +32,7 @@ namespace api {
3232

3333
using namespace org::openapitools::client::model;
3434

35-
ApiClient::ApiClient(std::shared_ptr<ApiConfiguration> configuration )
35+
ApiClient::ApiClient(std::shared_ptr<const ApiConfiguration> configuration )
3636
: m_Configuration(configuration)
3737
{
3838
}
@@ -48,11 +48,11 @@ void ApiClient::setResponseHandler(const ResponseHandlerType& responseHandler) {
4848
m_ResponseHandler = responseHandler;
4949
}
5050

51-
std::shared_ptr<ApiConfiguration> ApiClient::getConfiguration() const
51+
std::shared_ptr<const ApiConfiguration> ApiClient::getConfiguration() const
5252
{
5353
return m_Configuration;
5454
}
55-
void ApiClient::setConfiguration(std::shared_ptr<ApiConfiguration> configuration)
55+
void ApiClient::setConfiguration(std::shared_ptr<const ApiConfiguration> configuration)
5656
{
5757
m_Configuration = configuration;
5858
}
@@ -119,26 +119,26 @@ pplx::task<web::http::http_response> ApiClient::callApi(
119119
web::http::client::http_client client(m_Configuration->getBaseUrl(), m_Configuration->getHttpConfig());
120120

121121
web::http::http_request request;
122-
for ( auto& kvp : headerParams )
122+
for (const auto& kvp : headerParams)
123123
{
124124
request.headers().add(kvp.first, kvp.second);
125125
}
126126

127127
if (fileParams.size() > 0)
128128
{
129129
MultipartFormData uploadData;
130-
for (auto& kvp : formParams)
130+
for (const auto& kvp : formParams)
131131
{
132132
uploadData.add(ModelBase::toHttpContent(kvp.first, kvp.second));
133133
}
134-
for (auto& kvp : fileParams)
134+
for (const auto& kvp : fileParams)
135135
{
136136
uploadData.add(ModelBase::toHttpContent(kvp.first, kvp.second));
137137
}
138138
std::stringstream data;
139139
uploadData.writeTo(data);
140140
auto bodyString = data.str();
141-
auto length = bodyString.size();
141+
const auto length = bodyString.size();
142142
request.set_body(concurrency::streams::bytestream::open_istream(std::move(bodyString)), length, utility::conversions::to_string_t("multipart/form-data; boundary=") + uploadData.getBoundary());
143143
}
144144
else
@@ -148,7 +148,7 @@ pplx::task<web::http::http_response> ApiClient::callApi(
148148
std::stringstream data;
149149
postBody->writeTo(data);
150150
auto bodyString = data.str();
151-
auto length = bodyString.size();
151+
const auto length = bodyString.size();
152152
request.set_body(concurrency::streams::bytestream::open_istream(std::move(bodyString)), length, contentType);
153153
}
154154
else
@@ -168,7 +168,7 @@ pplx::task<web::http::http_response> ApiClient::callApi(
168168
else
169169
{
170170
web::http::uri_builder formData;
171-
for (auto& kvp : formParams)
171+
for (const auto& kvp : formParams)
172172
{
173173
formData.append_query(kvp.first, kvp.second);
174174
}
@@ -181,7 +181,7 @@ pplx::task<web::http::http_response> ApiClient::callApi(
181181
}
182182

183183
web::http::uri_builder builder(path);
184-
for (auto& kvp : queryParams)
184+
for (const auto& kvp : queryParams)
185185
{
186186
builder.append_query(kvp.first, kvp.second);
187187
}

0 commit comments

Comments
 (0)