Unverified Commit e7d1380a authored by mvdbeek's avatar mvdbeek
Browse files

Raise ValueError if invalid ID passed

I suspect a state bug in the tool form code is the issue here and the id
refers to a HDA id, but this is a solid fix anyway if someone submits
wrong values via the API.
Fixes https://github.com/galaxyproject/galaxy/issues/18485:
```
Stack Trace

Newest

AssertionError: null
  File "galaxy/web/framework/decorators.py", line 346, in decorator
    rval = func(self, trans, *args, **kwargs)
  File "galaxy/webapps/galaxy/api/tools.py", line 247, in build
    return tool.to_json(trans, kwd.get("inputs", kwd), history=history)
  File "galaxy/tools/__init__.py", line 2510, in to_json
    populate_state(request_context, self.inputs, params.__dict__, state_inputs, state_errors)
  File "galaxy/tools/parameters/__init__.py", line 412, in populate_state
    _populate_state_legacy(
  File "galaxy/tools/parameters/__init__.py", line 625, in _populate_state_legacy
    check_param(request_context, input, param_value, context, simple_errors=simple_errors)
  File "galaxy/tools/parameters/__init__.py", line 246, in check_param
    value = param.from_json(value, trans, param_values)
  File "galaxy/tools/parameters/basic.py", line 2132, in from_json
    value = self.to_python(value, trans.app)
  File "galaxy/tools/parameters/basic.py", line 1963, in to_python
    return history_item_dict_to_python(value["values"][0], app, self.name)
  File "galaxy/tools/parameters/basic.py", line 2799, in history_item_dict_to_python
    return src_id_to_item(sa_session=app.model.context, security=app.security, value=value)
  File "galaxy/tools/parameters/basic.py", line 2056, in src_id_to_item
    assert item
```
parent ed81681f
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -2053,7 +2053,8 @@ def src_id_to_item(
        item = sa_session.get(src_to_class[value["src"]], decoded_id)
    except KeyError:
        raise ValueError(f"Unknown input source {value['src']} passed to job submission API.")
    assert item
    if not item:
        raise ValueError("Invalid input id passed to job submission API.")
    item.extra_params = {k: v for k, v in value.items() if k not in ("src", "id")}
    return item