Skip to content

Reject malformed serialized worker payloads before committing history #134

Description

@rmcdaniel

Confirmed behavior

During the isolated native-storage experiment for #131/#132, a test worker submitted a workflow completion result as a plain string instead of an official Avro value. The completion committed successfully, but reading the completed run failed with a codec decode exception (HTTP 500). Repeating the experiment with Serializer::serializeWithCodec("avro", value) produced a readable result.

The affected caller is an authenticated worker submitting malformed data for a task it owns. This was observed in a disposable test runtime, not customer data. Normal SDK-generated Avro completions worked.

Cause to address

WorkerController::resolveWorkflowTaskCommandPayloadReferences currently only resolves array-valued command payloads. Serialized strings bypass that envelope validation, and the downstream normalizer can persist them without proving they are valid Avro. Valid serialized Avro strings are supported and must keep working.

This is separate from closed #61, which hardened direct conformance helper inputs rather than the runtime HTTP ingress.

Acceptance

  • Reject malformed serialized worker command payloads with a useful validation response before any task completion or history mutation.
  • Use the existing official Avro codec/validator; do not add JSON fallback or a custom decoder.
  • Cover unframed text, JSON strings/scalars, corrupt/truncated frames, and valid serialized/enveloped Avro, including a large result.
  • Prove a rejected completion leaves the task retryable and a subsequent valid completion readable after a fresh reload.
  • Audit related worker acknowledgement ingress for the same validation gap without changing application values nested inside valid Avro.

Priority

Accepted follow-up after publishing the already-merged storage recovery fixes. This does not invalidate the corrected Avro native-capacity experiment and does not authorize production admission enablement.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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