From 3e3848628cbb133d264bf9bd8143c92778619dac Mon Sep 17 00:00:00 2001 From: pedrohsdb Date: Mon, 9 Feb 2026 19:23:42 -0800 Subject: [PATCH] Sanitize text fields in create_task to prevent NUL byte DataErrors (#4677) --- skyvern/forge/sdk/db/agent_db.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/skyvern/forge/sdk/db/agent_db.py b/skyvern/forge/sdk/db/agent_db.py index 05e0f9a4..5ee30770 100644 --- a/skyvern/forge/sdk/db/agent_db.py +++ b/skyvern/forge/sdk/db/agent_db.py @@ -112,6 +112,7 @@ from skyvern.forge.sdk.schemas.workflow_copilot import ( WorkflowCopilotChatSender, ) from skyvern.forge.sdk.schemas.workflow_runs import WorkflowRunBlock +from skyvern.forge.sdk.utils.sanitization import sanitize_postgres_text from skyvern.forge.sdk.workflow.models.parameter import ( PARAMETER_TYPE, AWSSecretParameter, @@ -227,6 +228,18 @@ class AgentDB(BaseAlchemyDB): download_timeout: float | None = None, ) -> Task: try: + # Sanitize text fields to remove NUL bytes and control characters + # that PostgreSQL cannot store in text columns + def _sanitize(v: str | None) -> str | None: + return sanitize_postgres_text(v) if isinstance(v, str) else v + + navigation_goal = _sanitize(navigation_goal) + data_extraction_goal = _sanitize(data_extraction_goal) + title = _sanitize(title) + url = sanitize_postgres_text(url) + complete_criterion = _sanitize(complete_criterion) + terminate_criterion = _sanitize(terminate_criterion) + async with self.Session() as session: new_task = TaskModel( status=status,