Skip to content

Parser crashes on invalid input file instead of showing errors #862

@vargenau

Description

@vargenau

output.spdx.json

https://github.com/spdx/tools-java
gives:

This SPDX Document is not valid due to:
	object has missing required properties (["downloadLocation"]) for {"pointer":"/packages/0"}
	Document must have at least one relationship of type DOCUMENT_DESCRIBES

tools-python crashes:

pyspdxtools -i output.spdx.json
Traceback (most recent call last):
  File "/Users/mvargena/.local/bin/pyspdxtools", line 7, in <module>
    sys.exit(main())
             ~~~~^^
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/click/core.py", line 1442, in __call__
    return self.main(*args, **kwargs)
           ~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/click/core.py", line 1363, in main
    rv = self.invoke(ctx)
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/click/core.py", line 1226, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/click/core.py", line 794, in invoke
    return callback(*args, **kwargs)
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/spdx_tools/spdx/clitools/pyspdxtools.py", line 65, in main
    document: Document = parse_file(infile)
                         ~~~~~~~~~~^^^^^^^^
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/spdx_tools/spdx/parser/parse_anything.py", line 34, in parse_file
    return json_parser.parse_from_file(file_name, encoding)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/spdx_tools/spdx/parser/json/json_parser.py", line 16, in parse_from_file
    return JsonLikeDictParser().parse(input_doc_as_dict)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/spdx_tools/spdx/parser/jsonlikedict/json_like_dict_parser.py", line 84, in parse
    parsed_fields[argument_name] = parsing_method(field)
                                   ~~~~~~~~~~~~~~^^^^^^^
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/spdx_tools/spdx/parser/jsonlikedict/json_like_dict_parser.py", line 49, in <lambda>
    lambda x: parse_list_of_elements(x, self.package_parser.parse_package, self.package_parser.logger),
              ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/spdx_tools/spdx/parser/jsonlikedict/dict_parsing_functions.py", line 73, in parse_list_of_elements
    parsed_elements = append_parsed_field_or_log_error(
        logger, parsed_elements, element_dict, method_to_parse_element
    )
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/spdx_tools/spdx/parser/jsonlikedict/dict_parsing_functions.py", line 43, in append_parsed_field_or_log_error
    parsed_element = method_to_parse(field)
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/spdx_tools/spdx/parser/jsonlikedict/package_parser.py", line 135, in parse_package
    package = construct_or_raise_parsing_error(
        Package,
    ...<27 lines>...
        ),
    )
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/spdx_tools/spdx/parser/parsing_functions.py", line 13, in construct_or_raise_parsing_error
    constructed_object = object_to_construct(**args_for_construction)
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/spdx_tools/spdx/model/package.py", line 134, in __init__
    check_types_and_set_values(self, locals())
    ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/spdx_tools/common/typing/type_checks.py", line 26, in check_types_and_set_values
    setattr(instance_under_construction, key, value)
    ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mvargena/.local/pipx/venvs/spdx-tools/lib/python3.13/site-packages/spdx_tools/common/typing/dataclass_with_properties.py", line 32, in set_field_with_error_conversion
    set_field(self, value)
    ~~~~~~~~~^^^^^^^^^^^^^
  File "<@beartype(spdx_tools.common.typing.dataclass_with_properties.make_setter.set_field) at 0x1036a6840>", line 32, in set_field
beartype.roar.BeartypeCallHintParamViolation: Method spdx_tools.common.typing.dataclass_with_properties.make_setter.set_field() parameter value="None" violates type hint typing.Union[str, spdx_tools.spdx.model.spdx_no_assertion.SpdxNoAssertion, spdx_tools.spdx.model.spdx_none.SpdxNone], as <class "builtins.NoneType"> "None" not <class "spdx_tools.spdx.model.spdx_none.SpdxNone">, <class "spdx_tools.spdx.model.spdx_no_assertion.SpdxNoAssertion">, or str.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions