Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BUG: malformed includes raises NoMethodError #1376

Open
2 of 7 tasks
bf4 opened this issue Oct 1, 2021 · 1 comment
Open
2 of 7 tasks

BUG: malformed includes raises NoMethodError #1376

bf4 opened this issue Oct 1, 2021 · 1 comment

Comments

@bf4
Copy link
Collaborator

bf4 commented Oct 1, 2021

This issue is a (choose one):

  • Problem/bug report.
  • Feature request.
  • Request for support. Note: Please try to avoid submitting issues for support requests. Use Gitter instead.

Checklist before submitting:

  • I've searched for an existing issue.
  • I've asked my question on Gitter and have not received a satisfactory answer.
  • I've included a complete bug report template. This step helps us and allows us to see the bug without trying to reproduce the problem from your description. It helps you because you will frequently detect if it's a problem specific to your project.
  • The feature I'm asking for is compliant with the JSON:API spec.

Description

Choose one section below and delete the other:

Bug reports:

The CSV gem raises a NoMethodError when passed an array

e.g. CSV.parse_line(["memberships"]) raises

private method `gets' called for ["memberships"]:Array

And JR in 0.9.x and 0.10.x in a few places uses CSV.parse_line but only rescues CSV::MalformedCSVError

making a request like v1/users/:id?include[]=memberships with call e.g. JSONAPI::RequestParser#parse_include_directives with ["memberships"] and raise an unhandled error.

My proposal is 1) encapsulate wherever CSV.parse_line is called and 2) ensure any errors are handled and raises as JSONAPI::Exceptions

I could possibly make PRs to 0.9 and 0.10

(We're still on 0.9 due to bugs changes in handling of polymorphic types and plain old resources, but I'd like to help however I can)

@bf4
Copy link
Collaborator Author

bf4 commented Feb 8, 2022

on 0.9.x

# Remove when https://github.com/cerebris/jsonapi-resources/issues/1376 is resolved
module JSONAPIIncludeParserPatch
  def parse_include_directives(raw_include)
    super
  rescue NoMethodError
    # CSV.parse_line(["memberships"])
    # private method `gets' called for #<Array:0x00007f2a31bbb0b8>
    fail JSONAPI::Exceptions::InvalidInclude.new(format_key(@resource_klass._type), raw_include)
  end
end
JSONAPI::RequestParser.prepend(JSONAPIIncludeParserPatch)

on 0.10.x

# Remove when https://github.com/cerebris/jsonapi-resources/issues/1376 is resolved
module JSONAPIIncludeParserPatch
  def parse_include_directives(resource_klass, raw_include)
    super
  rescue NoMethodError
    # CSV.parse_line(["memberships"])
    # private method `gets' called for #<Array:0x00007f2a31bbb0b8>
    fail JSONAPI::Exceptions::InvalidInclude.new(format_key(resource_klass._type), raw_include)
  end
end
JSONAPI::RequestParser.prepend(JSONAPIIncludeParserPatch)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant