{"record":{"id":"feb25870dfb0a885","repo":"langflow-ai/langflow","slug":"knowledge-base-name-must-be-at-least-3-characters","errorCode":null,"errorMessage":"Knowledge base name must be at least 3 characters","messagePattern":"Knowledge base name must be at least 3 characters","errorType":"http","errorClass":"HTTPException","httpStatus":400,"severity":"error","filePath":"src/backend/base/langflow/api/v1/knowledge_bases.py","lineNumber":722,"sourceCode":"@router.post(\"\", status_code=HTTPStatus.CREATED)\n@router.post(\"/\", status_code=HTTPStatus.CREATED)\nasync def create_knowledge_base(\n    request: CreateKnowledgeBaseRequest,\n    current_user: CurrentActiveUser,\n) -> KnowledgeBaseInfo:\n    \"\"\"Create a new knowledge base with embedding configuration.\"\"\"\n    try:\n        kb_root_path = KBStorageHelper.get_root_path()\n        kb_user = current_user.username\n        kb_name = request.name.strip().replace(\" \", \"_\")\n        await _guard_kb_action(\n            current_user=current_user,\n            action=KnowledgeBaseAction.CREATE,\n            kb_name=kb_name or None,\n        )\n        # Validate KB name\n        if not kb_name or len(kb_name) < MIN_KB_NAME_LENGTH:\n            raise HTTPException(status_code=400, detail=\"Knowledge base name must be at least 3 characters\")\n\n        # Security: resolve paths and validate containment to prevent path traversal attacks.\n        # A crafted kb_name like \"../victim/evil\" or an absolute path like \"/tmp/evil\" must be\n        # rejected before any directory is created.\n        kb_user_path = (kb_root_path / kb_user).resolve()\n        kb_path = (kb_user_path / kb_name).resolve()\n        # The username also roots the path, so it must be contained within the KB root\n        # too (a username with \"..\" would otherwise escape it before mkdir).\n        _validate_kb_path_containment(kb_root_path.resolve(), kb_user_path, kb_name, kb_user)\n        _validate_kb_path_containment(kb_user_path, kb_path, kb_name, kb_user)\n\n        # Check both durable DB state and legacy disk state. During\n        # expand/contract rollout a KB row can exist even if its local\n        # sidecar directory was cleaned up out of band.\n        existing_record = await knowledge_base_service.get_by_user_and_name(current_user.id, kb_name)\n        if existing_record is not None:\n            raise HTTPException(status_code=409, detail=f\"Knowledge base '{kb_name}' already exists\")\n        if kb_path.exists():","sourceCodeStart":704,"sourceCodeEnd":740,"githubUrl":"https://github.com/langflow-ai/langflow/blob/976ec789d2886a86de109c044d089d68e96c9a35/src/backend/base/langflow/api/v1/knowledge_bases.py#L704-L740","documentation":"Error \"Knowledge base name must be at least 3 characters\" thrown in langflow-ai/langflow.","triggerScenarios":"Occurs when creating a knowledge base with a name shorter than 3 characters.","commonSituations":"See trigger scenarios.","solutions":["Use a knowledge base name of at least 3 characters."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"976ec789d2886a86de109c044d089d68e96c9a35","analyzedAt":"2026-08-14T18:23:12.227Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}