swagger-api/swagger-codegen

Qt/C++ generated code crashes if response is of type string

开放

#4,835 创建于 2017年2月22日

 (3 条评论) (0 个反应) (0 位负责人)HTML (5,474 个派生)batch import
Client: QTIssue: Bughelp wanted

仓库指标

星标
 (12,701 个星标)
PR 合并指标
 (PR 指标待抓取)

描述

Description

Qt/C++ code crashes during the API callback when output is cast to QString*

On Mac, this causes a fatal SIGSEGV exception in QtCore at QString::append(QString const&) + 17 according to the crash log.

Swagger-codegen version

Current version used by http://editor.swagger.io/#/ at time of posting.

Steps to reproduce

Include the following in the yaml:

      responses:
        '200':
          description: OK
          schema:
            type: string
            title: jsonData

then:

  1. Generate Qt/C++ code
  2. Create a slot corresponding to the callback and connect the callback signal to it
  3. Instantiate the API interface class (e.g. SWGDefaultApi) and call the endpoint
Suggest a Fix

I believe the problem is this line of code:

https://github.com/swagger-api/swagger-codegen/blob/master/modules/swagger-codegen/src/main/resources/qt5cpp/api-body.mustache#L169

I believe the solution is to detect when {{returnType}} is QString* and in this case just replace the line with:

{{{returnType}}} output = &json;

I have tested this locally by replacing (in the generated code)

QString* output = static_cast<QString*>(create(json, QString("QString")));

with

QString* output = &json;

贡献者指南