swagger-api / swagger-api/swagger-codegen

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

Open
#4,835 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Client: QT help wanted Issue: Bug
Dominant language
Mustache
Stars
17.8k
Forks
6k
PR merge metrics
No merged PRs in 30d

Description

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;

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in modules/swagger-codegen/src/main/resources/qt5cpp/api-body.mustache around line 169 and reproduce the issue with a response schema whose type is string. Inspect the generated Qt/C++ callback code and compare the QString* handling with the reported replacement. Done means generated code handles string responses without the callback crashing.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
tooling
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
50/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.