Skip to content

[BUG] Generated Ruby client may contains unexpected interpolation when using pattern #2088

@autopp

Description

@autopp

Bug Report Checklist

  • Have you provided a full/minimal spec to reproduce the issue?
  • Have you validated the input using an OpenAPI validator (example)?
  • What's the version of OpenAPI Generator used?
  • Have you search for related issues/PRs?
  • What's the actual output vs expected output?
  • [Optional] Bounty to sponsor the fix (example)
Description

When using pattern, the generated Ruby client code may contain an unexpected interpolation.

openapi-generator version
$ java -jar modules/openapi-generator-cli/target/openapi-generator-cli.jar version
4.0.0-SNAPSHOT

$ git log --oneline -n 1
aa24f07433 (HEAD -> master, origin/master, origin/HEAD) [TypescriptAngular] gets package npm version from API specification (#2019)
OpenAPI declaration file content or url

See: https://gist.github.com/autopp/925901844b9c973fd3c86d06ea95c03a#file-swagger-yml

The point to notice in this example is that #{...} is included in the pattern.

Command line used for generation
$ java -jar modules/openapi-generator-cli/target/openapi-generator-cli.jar generate --skip-validate-spec -g ruby -o /tmp/gem -i 'https://gist.githubusercontent.com/autopp/925901844b9c973fd3c86d06ea95c03a/raw/df474dc0331ee167d337a2cc7aadc49afdd7ee03/swagger.yml'
Steps to reproduce
  1. Run the above command to generate client code for Ruby.
  2. lib/openapi_client/api/default_api.rb contains unexpected interpolation
    def foo_get_with_http_info(opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: DefaultApi.foo_get ...'
      end
      if @api_client.config.client_side_validation && !opts[:'x'].nil? && opts[:'x'] !~ Regexp.new(/^injected code: #{injected.code}$/)
        fail ArgumentError, "invalid value for 'opts[:\"x\"]' when calling DefaultApi.foo_get, must conform to the pattern /^injected code: #{injected.code}$/."
      end

In this example, injected.code is executed when request to GET /foo (And error may occur).

Related issues/PRs

N/A

Suggest a fix

Curretly, RubyClientCodegen dose not override escapeText.
Should not this be overridden to accommodate Ruby's string literal characteristics?

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions