{"record":{"id":"b781239282c3f0a3","repo":"AlistGo/alist","slug":"new-name-is-empty","errorCode":null,"errorMessage":"new name is empty","messagePattern":"new name is empty","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"drivers/guangyapan/driver.go","lineNumber":277,"sourceCode":"\t}\n\tif !strings.EqualFold(strings.TrimSpace(out.Msg), \"success\") {\n\t\treturn fmt.Errorf(\"make dir failed: %s\", strings.TrimSpace(out.Msg))\n\t}\n\treturn nil\n}\n\nfunc (d *GuangYaPan) Rename(ctx context.Context, srcObj model.Obj, newName string) error {\n\tif err := d.ensureAccessToken(ctx); err != nil {\n\t\treturn err\n\t}\n\n\tfileID := strings.TrimSpace(srcObj.GetID())\n\tif fileID == \"\" {\n\t\treturn errors.New(\"file id is empty\")\n\t}\n\tname := strings.TrimSpace(newName)\n\tif name == \"\" {\n\t\treturn errors.New(\"new name is empty\")\n\t}\n\n\tvar out commonResp\n\tif err := d.postAPI(ctx, \"/nd.bizuserres.s/v1/file/rename\", map[string]any{\n\t\t\"fileId\":  fileID,\n\t\t\"newName\": name,\n\t}, &out); err != nil {\n\t\treturn err\n\t}\n\tif !strings.EqualFold(strings.TrimSpace(out.Msg), \"success\") {\n\t\treturn fmt.Errorf(\"rename failed: %s\", strings.TrimSpace(out.Msg))\n\t}\n\treturn nil\n}\n\nfunc (d *GuangYaPan) Remove(ctx context.Context, obj model.Obj) error {\n\tif err := d.ensureAccessToken(ctx); err != nil {\n\t\treturn err","sourceCodeStart":259,"sourceCodeEnd":295,"githubUrl":"https://github.com/AlistGo/alist/blob/843d9dc8149126976b2625911e45a4d3ffd6f2f5/drivers/guangyapan/driver.go#L259-L295","documentation":"GuangYaPan Rename validates the new name after trimming and rejects empty values before calling /file/rename. This prevents sending the API a request that would blank out the file's name or fail server-side with a confusing message.","triggerScenarios":"Renaming with newName that is empty or whitespace-only: UI allowed an empty rename dialog submit, or a script passed an unset variable.","commonSituations":"Rename dialog submitted without typing; batch rename script with a missing name field; leading/trailing spaces making the trimmed value empty.","solutions":["Require a non-empty trimmed name in the caller/UI before submitting the rename","Default the dialog to the current name so an accidental blank submit is impossible","In scripts, assert the new name variable is non-empty"],"exampleFix":"// before\nd.Rename(ctx, obj, \"\")\n// after\nnewName := strings.TrimSpace(input)\nif newName == \"\" { return errors.New(\"new name required\") }\nd.Rename(ctx, obj, newName)","handlingStrategy":"validation","validationCode":"newName := strings.TrimSpace(newName)\nif newName == \"\" {\n\treturn errors.New(\"new name is required\")\n}\nreturn d.Rename(ctx, srcObj, newName)","typeGuard":"func validNewName(s string) bool { return strings.TrimSpace(s) != \"\" }","tryCatchPattern":null,"preventionTips":["Pre-fill rename dialogs with the current name","Validate non-empty trimmed names in form logic","In batch-rename scripts, skip rows with blank target names"],"tags":["guangyapan","rename","validation","driver"],"backgroundTag":null,"analyzedSha":"843d9dc8149126976b2625911e45a4d3ffd6f2f5","analyzedAt":"2026-08-15T12:14:11.722Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}