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;

貢獻者指南