Skip to content

Commit

Permalink
[cpp-restsdk] fix crashes and constness (#5123)
Browse files Browse the repository at this point in the history
* []c++[cpprest]fix some constness and invalid access to null  entities

* update petstore sample
  • Loading branch information
eimerej authored Feb 13, 2020
1 parent 5a5c3db commit 346cfc6
Show file tree
Hide file tree
Showing 44 changed files with 179 additions and 160 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public:
{{#allParams}}
{{^required}}boost::optional<{{/required}}{{#isFile}}std::shared_ptr<{{/isFile}}{{{dataType}}}{{#isFile}}>{{/isFile}}{{^required}}>{{/required}} {{paramName}}{{#hasMore}},{{/hasMore}}
{{/allParams}}
) = 0;
) const = 0;
{{/operation}}
};{{/gmockApis}}

Expand All @@ -46,7 +46,7 @@ public:
using Base = I{{classname}};
{{/gmockApis}}

explicit {{classname}}( std::shared_ptr<ApiClient> apiClient );
explicit {{classname}}( std::shared_ptr<const ApiClient> apiClient );

{{#gmockApis}}
~{{classname}}() override;
Expand All @@ -69,11 +69,11 @@ public:
{{#allParams}}
{{^required}}boost::optional<{{/required}}{{#isFile}}std::shared_ptr<{{/isFile}}{{{dataType}}}{{#isFile}}>{{/isFile}}{{^required}}>{{/required}} {{paramName}}{{#hasMore}},{{/hasMore}}
{{/allParams}}
){{#gmockApis}} override{{/gmockApis}};
) const{{#gmockApis}} override{{/gmockApis}};
{{/operation}}

protected:
std::shared_ptr<ApiClient> m_ApiClient;
std::shared_ptr<const ApiClient> m_ApiClient;
};

{{#apiNamespaceDeclarations}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ namespace {{this}} {

using namespace {{modelNamespace}};

{{classname}}::{{classname}}( std::shared_ptr<ApiClient> apiClient )
{{classname}}::{{classname}}( std::shared_ptr<const ApiClient> apiClient )
: m_ApiClient(apiClient)
{
}
Expand All @@ -26,7 +26,7 @@ using namespace {{modelNamespace}};
}

{{#operation}}
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}})
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
{
{{#allParams}}{{#required}}{{^isPrimitiveType}}{{^isContainer}}
// verify the required parameter '{{paramName}}' is set
Expand All @@ -36,7 +36,7 @@ pplx::task<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/r
}
{{/isContainer}}{{/isPrimitiveType}}{{/required}}{{/allParams}}

std::shared_ptr<ApiConfiguration> localVarApiConfiguration( m_ApiClient->getConfiguration() );
std::shared_ptr<const ApiConfiguration> localVarApiConfiguration( m_ApiClient->getConfiguration() );
utility::string_t localVarPath = utility::conversions::to_string_t("{{{path}}}");
{{#pathParams}}boost::replace_all(localVarPath, utility::conversions::to_string_t("{") + utility::conversions::to_string_t("{{baseName}}") + utility::conversions::to_string_t("}"), ApiClient::parameterToString({{{paramName}}}));
{{/pathParams}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,16 +34,16 @@ using namespace {{modelNamespace}};
class {{declspec}} ApiClient
{
public:
ApiClient( std::shared_ptr<ApiConfiguration> configuration = nullptr );
ApiClient( std::shared_ptr<const ApiConfiguration> configuration = nullptr );
virtual ~ApiClient();
typedef std::function<void(web::http::status_code, const web::http::http_headers&)> ResponseHandlerType;
const ResponseHandlerType& getResponseHandler() const;
void setResponseHandler(const ResponseHandlerType& responseHandler);
std::shared_ptr<ApiConfiguration> getConfiguration() const;
void setConfiguration(std::shared_ptr<ApiConfiguration> configuration);
std::shared_ptr<const ApiConfiguration> getConfiguration() const;
void setConfiguration(std::shared_ptr<const ApiConfiguration> configuration);
static utility::string_t parameterToString(utility::string_t value);
static utility::string_t parameterToString(int32_t value);
Expand All @@ -70,7 +70,7 @@ public:
protected:
ResponseHandlerType m_ResponseHandler;
std::shared_ptr<ApiConfiguration> m_Configuration;
std::shared_ptr<const ApiConfiguration> m_Configuration;
};

template<class T>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ namespace {{this}} {

using namespace {{modelNamespace}};

ApiClient::ApiClient(std::shared_ptr<ApiConfiguration> configuration )
ApiClient::ApiClient(std::shared_ptr<const ApiConfiguration> configuration )
: m_Configuration(configuration)
{
}
Expand All @@ -37,11 +37,11 @@ void ApiClient::setResponseHandler(const ResponseHandlerType& responseHandler) {
m_ResponseHandler = responseHandler;
}

std::shared_ptr<ApiConfiguration> ApiClient::getConfiguration() const
std::shared_ptr<const ApiConfiguration> ApiClient::getConfiguration() const
{
return m_Configuration;
}
void ApiClient::setConfiguration(std::shared_ptr<ApiConfiguration> configuration)
void ApiClient::setConfiguration(std::shared_ptr<const ApiConfiguration> configuration)
{
m_Configuration = configuration;
}
Expand Down Expand Up @@ -108,26 +108,26 @@ pplx::task<web::http::http_response> ApiClient::callApi(
web::http::client::http_client client(m_Configuration->getBaseUrl(), m_Configuration->getHttpConfig());

web::http::http_request request;
for ( auto& kvp : headerParams )
for (const auto& kvp : headerParams)
{
request.headers().add(kvp.first, kvp.second);
}

if (fileParams.size() > 0)
{
MultipartFormData uploadData;
for (auto& kvp : formParams)
for (const auto& kvp : formParams)
{
uploadData.add(ModelBase::toHttpContent(kvp.first, kvp.second));
}
for (auto& kvp : fileParams)
for (const auto& kvp : fileParams)
{
uploadData.add(ModelBase::toHttpContent(kvp.first, kvp.second));
}
std::stringstream data;
uploadData.writeTo(data);
auto bodyString = data.str();
auto length = bodyString.size();
const auto length = bodyString.size();
request.set_body(concurrency::streams::bytestream::open_istream(std::move(bodyString)), length, utility::conversions::to_string_t("multipart/form-data; boundary=") + uploadData.getBoundary());
}
else
Expand All @@ -137,7 +137,7 @@ pplx::task<web::http::http_response> ApiClient::callApi(
std::stringstream data;
postBody->writeTo(data);
auto bodyString = data.str();
auto length = bodyString.size();
const auto length = bodyString.size();
request.set_body(concurrency::streams::bytestream::open_istream(std::move(bodyString)), length, contentType);
}
else
Expand All @@ -157,7 +157,7 @@ pplx::task<web::http::http_response> ApiClient::callApi(
else
{
web::http::uri_builder formData;
for (auto& kvp : formParams)
for (const auto& kvp : formParams)
{
formData.append_query(kvp.first, kvp.second);
}
Expand All @@ -170,7 +170,7 @@ pplx::task<web::http::http_response> ApiClient::callApi(
}

web::http::uri_builder builder(path);
for (auto& kvp : queryParams)
for (const auto& kvp : queryParams)
{
builder.append_query(kvp.first, kvp.second);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public:
ApiConfiguration();
virtual ~ApiConfiguration();
web::http::client::http_client_config& getHttpConfig();
const web::http::client::http_client_config& getHttpConfig() const;
void setHttpConfig( web::http::client::http_client_config& value );
utility::string_t getBaseUrl() const;
Expand All @@ -34,6 +34,7 @@ public:
void setUserAgent( const utility::string_t value );
std::map<utility::string_t, utility::string_t>& getDefaultHeaders();
const std::map<utility::string_t, utility::string_t>& getDefaultHeaders() const;
utility::string_t getApiKey( const utility::string_t& prefix) const;
void setApiKey( const utility::string_t& prefix, const utility::string_t& apiKey );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ ApiConfiguration::~ApiConfiguration()
{
}

web::http::client::http_client_config& ApiConfiguration::getHttpConfig()
const web::http::client::http_client_config& ApiConfiguration::getHttpConfig() const
{
return m_HttpConfig;
}
Expand Down Expand Up @@ -48,6 +48,11 @@ std::map<utility::string_t, utility::string_t>& ApiConfiguration::getDefaultHead
return m_DefaultHeaders;
}

const std::map<utility::string_t, utility::string_t>& ApiConfiguration::getDefaultHeaders() const
{
return m_DefaultHeaders;
}

utility::string_t ApiConfiguration::getApiKey( const utility::string_t& prefix) const
{
auto result = m_ApiKeys.find(prefix);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,7 @@ void {{classname}}::fromJson(const web::json::value& val)
}
else
{
{{{items.datatype}}} newItem({{{items.defaultValue}}});
auto newItem = std::make_shared<{{{items.datatype}}}::element_type>();
newItem->fromJson(item);
m_{{name}}.push_back( newItem );
}
Expand Down Expand Up @@ -309,7 +309,7 @@ void {{classname}}::fromJson(const web::json::value& val)
}
else
{
{{{items.datatype}}} newItem({{{items.defaultValue}}});
auto newItem = std::make_shared<{{{items.datatype}}}::element_type>();
newItem->fromJson(item.at(utility::conversions::to_string_t("value")));
m_{{name}}.insert(std::pair<utility::string_t,{{{items.datatype}}}>( key, newItem ));
}
Expand Down Expand Up @@ -344,7 +344,7 @@ void {{classname}}::fromJson(const web::json::value& val)
{{/isDateTime}}
{{^isDateTime}}
{{^isByteArray}}
{{{dataType}}} newItem({{{defaultValue}}});
auto newItem = std::make_shared<{{{datatype}}}::element_type>();
newItem->fromJson(fieldValue);
{{setter}}( newItem );
{{/isByteArray}}
Expand All @@ -371,7 +371,7 @@ void {{classname}}::fromJson(const web::json::value& val)
{{setter}}(ModelBase::fileFromJson(val.at(utility::conversions::to_string_t("{{baseName}}"))));
{{/vendorExtensions.x-codegen-file}}
{{^vendorExtensions.x-codegen-file}}
{{{dataType}}} new{{name}}({{{defaultValue}}});
auto new{{name}} = std::make_shared<{{{dataType}}}::element_type>();
new{{name}}->fromJson(val.at(utility::conversions::to_string_t("{{baseName}}")));
{{setter}}( new{{name}} );
{{/vendorExtensions.x-codegen-file}}
Expand Down Expand Up @@ -553,7 +553,7 @@ void {{classname}}::fromMultiPart(std::shared_ptr<MultipartFormData> multipart,
}
else
{
{{{items.datatype}}} newItem({{{items.defaultValue}}});
auto newItem = std::make_shared<{{{items.datatype}}}::element_type>();
newItem->fromJson(item);
m_{{name}}.push_back( newItem );
}
Expand Down Expand Up @@ -600,7 +600,7 @@ void {{classname}}::fromMultiPart(std::shared_ptr<MultipartFormData> multipart,
}
else
{
{{{items.datatype}}} newItem({{{items.defaultValue}}});
auto newItem = std::make_shared<{{{items.datatype}}}::element_type>();
newItem->fromJson(item[utility::conversions::to_string_t("value")]);
m_{{name}}.insert(std::pair<utility::string_t,{{{items.datatype}}}>( key, newItem ));
}
Expand Down Expand Up @@ -633,7 +633,7 @@ void {{classname}}::fromMultiPart(std::shared_ptr<MultipartFormData> multipart,
{{^isDateTime}}
if(multipart->hasContent(utility::conversions::to_string_t("{{baseName}}")))
{
{{{dataType}}} newItem({{{defaultValue}}});
auto newItem = std::make_shared<{{{datatype}}}::element_type>();
newItem->fromMultiPart(multipart, utility::conversions::to_string_t("{{baseName}}."));
{{setter}}( newItem );
}
Expand All @@ -659,7 +659,7 @@ void {{classname}}::fromMultiPart(std::shared_ptr<MultipartFormData> multipart,
{{setter}}(multipart->getContent(utility::conversions::to_string_t("{{baseName}}")));
{{/vendorExtensions.x-codegen-file}}
{{^vendorExtensions.x-codegen-file}}
{{{dataType}}} new{{name}}({{{defaultValue}}});
auto new{{name}} = std::make_shared<{{{dataType}}}::element_type>();
new{{name}}->fromMultiPart(multipart, utility::conversions::to_string_t("{{baseName}}."));
{{setter}}( new{{name}} );
{{/vendorExtensions.x-codegen-file}}
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
4.1.0-SNAPSHOT
4.2.3-SNAPSHOT
22 changes: 11 additions & 11 deletions samples/client/petstore/cpp-restsdk/client/ApiClient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
*
* The version of the OpenAPI document: 1.0.0
*
* NOTE: This class is auto generated by OpenAPI-Generator 4.1.3-SNAPSHOT.
* NOTE: This class is auto generated by OpenAPI-Generator 4.2.3-SNAPSHOT.
* https://openapi-generator.tech
* Do not edit the class manually.
*/
Expand Down Expand Up @@ -32,7 +32,7 @@ namespace api {

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

ApiClient::ApiClient(std::shared_ptr<ApiConfiguration> configuration )
ApiClient::ApiClient(std::shared_ptr<const ApiConfiguration> configuration )
: m_Configuration(configuration)
{
}
Expand All @@ -48,11 +48,11 @@ void ApiClient::setResponseHandler(const ResponseHandlerType& responseHandler) {
m_ResponseHandler = responseHandler;
}

std::shared_ptr<ApiConfiguration> ApiClient::getConfiguration() const
std::shared_ptr<const ApiConfiguration> ApiClient::getConfiguration() const
{
return m_Configuration;
}
void ApiClient::setConfiguration(std::shared_ptr<ApiConfiguration> configuration)
void ApiClient::setConfiguration(std::shared_ptr<const ApiConfiguration> configuration)
{
m_Configuration = configuration;
}
Expand Down Expand Up @@ -119,26 +119,26 @@ pplx::task<web::http::http_response> ApiClient::callApi(
web::http::client::http_client client(m_Configuration->getBaseUrl(), m_Configuration->getHttpConfig());

web::http::http_request request;
for ( auto& kvp : headerParams )
for (const auto& kvp : headerParams)
{
request.headers().add(kvp.first, kvp.second);
}

if (fileParams.size() > 0)
{
MultipartFormData uploadData;
for (auto& kvp : formParams)
for (const auto& kvp : formParams)
{
uploadData.add(ModelBase::toHttpContent(kvp.first, kvp.second));
}
for (auto& kvp : fileParams)
for (const auto& kvp : fileParams)
{
uploadData.add(ModelBase::toHttpContent(kvp.first, kvp.second));
}
std::stringstream data;
uploadData.writeTo(data);
auto bodyString = data.str();
auto length = bodyString.size();
const auto length = bodyString.size();
request.set_body(concurrency::streams::bytestream::open_istream(std::move(bodyString)), length, utility::conversions::to_string_t("multipart/form-data; boundary=") + uploadData.getBoundary());
}
else
Expand All @@ -148,7 +148,7 @@ pplx::task<web::http::http_response> ApiClient::callApi(
std::stringstream data;
postBody->writeTo(data);
auto bodyString = data.str();
auto length = bodyString.size();
const auto length = bodyString.size();
request.set_body(concurrency::streams::bytestream::open_istream(std::move(bodyString)), length, contentType);
}
else
Expand All @@ -168,7 +168,7 @@ pplx::task<web::http::http_response> ApiClient::callApi(
else
{
web::http::uri_builder formData;
for (auto& kvp : formParams)
for (const auto& kvp : formParams)
{
formData.append_query(kvp.first, kvp.second);
}
Expand All @@ -181,7 +181,7 @@ pplx::task<web::http::http_response> ApiClient::callApi(
}

web::http::uri_builder builder(path);
for (auto& kvp : queryParams)
for (const auto& kvp : queryParams)
{
builder.append_query(kvp.first, kvp.second);
}
Expand Down
Loading

0 comments on commit 346cfc6

Please sign in to comment.