Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

OneDrive网盘无法上传 #8043

Open
4 tasks done
tianli-sir opened this issue Feb 25, 2025 · 6 comments · May be fixed by #8081
Open
4 tasks done

OneDrive网盘无法上传 #8043

tianli-sir opened this issue Feb 25, 2025 · 6 comments · May be fixed by #8081
Labels
bug Something isn't working

Comments

@tianli-sir
Copy link

Please make sure of the following things

  • I have read the documentation.
    我已经阅读了文档

  • I'm sure there are no duplicate issues or discussions.
    我确定没有重复的issue或讨论。

  • I'm sure it's due to AList and not something else(such as Network ,Dependencies or Operational).
    我确定是AList的问题,而不是其他原因(例如网络依赖操作)。

  • I'm sure this issue is not fixed in the latest version.
    我确定这个问题在最新版本中没有被修复。

AList Version / AList 版本

v3.42.0

Driver used / 使用的存储驱动

OneDrive

Describe the bug / 问题描述

挂载的OneDrive网盘无法上传文件,提示{"error":{"code":"invalidRequest","message":"The size of the provided stream is not known. Make sure the request is not chunked, and the Content-Length header is specified"}}

Reproduction / 复现链接

进行复制任务或上传任务出现问题

Config / 配置

{
"encrypted": "",
"settings": [
{
"key": "version",
"value": "refs/heads/main",
"help": "",
"type": "string",
"options": "",
"group": 1,
"flag": 2,
"index": 0
},
{
"key": "site_title",
"value": "AList",
"help": "",
"type": "string",
"options": "",
"group": 1,
"flag": 0,
"index": 1
},
{
"key": "announcement",
"value": "### repo\nhttps://github.com/alist-org/alist",
"help": "",
"type": "text",
"options": "",
"group": 1,
"flag": 0,
"index": 2
},
{
"key": "pagination_type",
"value": "all",
"help": "",
"type": "select",
"options": "all,pagination,load_more,auto_load_more",
"group": 1,
"flag": 0,
"index": 3
},
{
"key": "default_page_size",
"value": "30",
"help": "",
"type": "number",
"options": "",
"group": 1,
"flag": 0,
"index": 4
},
{
"key": "allow_indexed",
"value": "false",
"help": "",
"type": "bool",
"options": "",
"group": 1,
"flag": 0,
"index": 5
},
{
"key": "allow_mounted",
"value": "true",
"help": "",
"type": "bool",
"options": "",
"group": 1,
"flag": 0,
"index": 6
},
{
"key": "robots_txt",
"value": "User-agent: pan.baidu.com\nAllow: /",
"help": "",
"type": "text",
"options": "",
"group": 1,
"flag": 0,
"index": 7
},
{
"key": "logo",
"value": "https://cdn.jsdelivr.net/gh/alist-org/logo@main/logo.svg",
"help": "",
"type": "text",
"options": "",
"group": 2,
"flag": 0,
"index": 8
},
{
"key": "favicon",
"value": "https://cdn.jsdelivr.net/gh/alist-org/logo@main/logo.svg",
"help": "",
"type": "string",
"options": "",
"group": 2,
"flag": 0,
"index": 9
},
{
"key": "main_color",
"value": "#1890ff",
"help": "",
"type": "string",
"options": "",
"group": 2,
"flag": 0,
"index": 10
},
{
"key": "home_icon",
"value": "🏠",
"help": "",
"type": "string",
"options": "",
"group": 2,
"flag": 0,
"index": 11
},
{
"key": "home_container",
"value": "max_980px",
"help": "",
"type": "select",
"options": "max_980px,hope_container",
"group": 2,
"flag": 0,
"index": 12
},
{
"key": "settings_layout",
"value": "list",
"help": "",
"type": "select",
"options": "list,responsive",
"group": 2,
"flag": 0,
"index": 13
},
{
"key": "text_types",
"value": "txt,htm,html,xml,java,properties,sql,js,md,json,conf,ini,vue,php,py,bat,gitignore,yml,go,sh,c,cpp,h,hpp,tsx,vtt,srt,ass,rs,lrc",
"help": "",
"type": "text",
"options": "",
"group": 3,
"flag": 1,
"index": 14
},
{
"key": "audio_types",
"value": "mp3,flac,ogg,m4a,wav,opus,wma",
"help": "",
"type": "text",
"options": "",
"group": 3,
"flag": 1,
"index": 15
},
{
"key": "video_types",
"value": "mp4,mkv,avi,mov,rmvb,webm,flv,m3u8",
"help": "",
"type": "text",
"options": "",
"group": 3,
"flag": 1,
"index": 16
},
{
"key": "image_types",
"value": "jpg,tiff,jpeg,png,gif,bmp,svg,ico,swf,webp",
"help": "",
"type": "text",
"options": "",
"group": 3,
"flag": 1,
"index": 17
},
{
"key": "proxy_types",
"value": "m3u8,url",
"help": "",
"type": "text",
"options": "",
"group": 3,
"flag": 1,
"index": 18
},
{
"key": "proxy_ignore_headers",
"value": "authorization,referer",
"help": "",
"type": "text",
"options": "",
"group": 3,
"flag": 1,
"index": 19
},
{
"key": "external_previews",
"value": "{}",
"help": "",
"type": "text",
"options": "",
"group": 3,
"flag": 0,
"index": 20
},
{
"key": "iframe_previews",
"value": "{\n\t"doc,docx,xls,xlsx,ppt,pptx": {\n\t\t"Microsoft":"https://view.officeapps.live.com/op/view.aspx?src=$e_url",\n\t\t"Google":"https://docs.google.com/gview?url=$e_url&embedded=true"\n\t},\n\t"pdf": {\n\t\t"PDF.js":"https://alist-org.github.io/pdf.js/web/viewer.html?file=$e_url"\n\t},\n\t"epub": {\n\t\t"EPUB.js":"https://alist-org.github.io/static/epub.js/viewer.html?url=$e_url"\n\t}\n}",
"help": "",
"type": "text",
"options": "",
"group": 3,
"flag": 0,
"index": 21
},
{
"key": "audio_cover",
"value": "https://jsd.nn.ci/gh/alist-org/logo@main/logo.svg",
"help": "",
"type": "string",
"options": "",
"group": 3,
"flag": 0,
"index": 22
},
{
"key": "audio_autoplay",
"value": "true",
"help": "",
"type": "bool",
"options": "",
"group": 3,
"flag": 0,
"index": 23
},
{
"key": "video_autoplay",
"value": "true",
"help": "",
"type": "bool",
"options": "",
"group": 3,
"flag": 0,
"index": 24
},
{
"key": "preview_archives_by_default",
"value": "true",
"help": "",
"type": "bool",
"options": "",
"group": 3,
"flag": 0,
"index": 25
},
{
"key": "hide_files",
"value": "/\/README.md/i",
"help": "",
"type": "text",
"options": "",
"group": 4,
"flag": 0,
"index": 26
},
{
"key": "package_download",
"value": "false",
"help": "",
"type": "bool",
"options": "",
"group": 4,
"flag": 0,
"index": 27
},
{
"key": "customize_head",
"value": "",
"help": "",
"type": "text",
"options": "",
"group": 4,
"flag": 1,
"index": 28
},
{
"key": "customize_body",
"value": "",
"help": "",
"type": "text",
"options": "",
"group": 4,
"flag": 1,
"index": 29
},
{
"key": "link_expiration",
"value": "0",
"help": "",
"type": "number",
"options": "",
"group": 4,
"flag": 1,
"index": 30
},
{
"key": "sign_all",
"value": "true",
"help": "",
"type": "bool",
"options": "",
"group": 4,
"flag": 1,
"index": 31
},
{
"key": "privacy_regs",
"value": "(?:(?:\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(?:\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\n([[:xdigit:]]{1,4}(?::[[:xdigit:]]{1,4}){7}|::|:(?::[[:xdigit:]]{1,4}){1,6}|[[:xdigit:]]{1,4}:(?::[[:xdigit:]]{1,4}){1,5}|(?:[[:xdigit:]]{1,4}:){2}(?::[[:xdigit:]]{1,4}){1,4}|(?:[[:xdigit:]]{1,4}:){3}(?::[[:xdigit:]]{1,4}){1,3}|(?:[[:xdigit:]]{1,4}:){4}(?::[[:xdigit:]]{1,4}){1,2}|(?:[[:xdigit:]]{1,4}:){5}:[[:xdigit:]]{1,4}|(?:[[:xdigit:]]{1,4}:){1,6}:)\n(?U)access_token=(.*)&",
"help": "",
"type": "text",
"options": "",
"group": 4,
"flag": 1,
"index": 32
},
{
"key": "ocr_api",
"value": "https://api.nn.ci/ocr/file/json",
"help": "",
"type": "string",
"options": "",
"group": 4,
"flag": 0,
"index": 33
},
{
"key": "filename_char_mapping",
"value": "{"/": "|"}",
"help": "",
"type": "text",
"options": "",
"group": 4,
"flag": 0,
"index": 34
},
{
"key": "forward_direct_link_params",
"value": "false",
"help": "",
"type": "bool",
"options": "",
"group": 4,
"flag": 0,
"index": 35
},
{
"key": "ignore_direct_link_params",
"value": "sign,alist_ts",
"help": "",
"type": "string",
"options": "",
"group": 4,
"flag": 0,
"index": 36
},
{
"key": "webauthn_login_enabled",
"value": "false",
"help": "",
"type": "bool",
"options": "",
"group": 4,
"flag": 0,
"index": 37
},
{
"key": "token",
"value": "alist-85e46980-789e-438e-8b55-b7d2307ff55d93YMfTaatKSv7OX48yssAwgNeHKi8zuoVcghWj8DVKTkM6S36MAgGQ4Ft5NfeSOZ",
"help": "",
"type": "string",
"options": "",
"group": 0,
"flag": 1,
"index": 38
},
{
"key": "search_index",
"value": "none",
"help": "",
"type": "select",
"options": "database,database_non_full_text,bleve,meilisearch,none",
"group": 6,
"flag": 0,
"index": 39
},
{
"key": "auto_update_index",
"value": "false",
"help": "",
"type": "bool",
"options": "",
"group": 6,
"flag": 0,
"index": 40
},
{
"key": "ignore_paths",
"value": "",
"help": "one path per line",
"type": "text",
"options": "",
"group": 6,
"flag": 1,
"index": 41
},
{
"key": "max_index_depth",
"value": "20",
"help": "max depth of index",
"type": "number",
"options": "",
"group": 6,
"flag": 1,
"index": 42
},
{
"key": "index_progress",
"value": "{"obj_count":0,"is_done":true,"last_done_time":null,"error":""}",
"help": "",
"type": "text",
"options": "",
"group": 0,
"flag": 1,
"index": 43
},
{
"key": "sso_login_enabled",
"value": "false",
"help": "",
"type": "bool",
"options": "",
"group": 7,
"flag": 0,
"index": 44
},
{
"key": "sso_login_platform",
"value": "",
"help": "",
"type": "select",
"options": "Casdoor,Github,Microsoft,Google,Dingtalk,OIDC",
"group": 7,
"flag": 0,
"index": 45
},
{
"key": "sso_client_id",
"value": "",
"help": "",
"type": "string",
"options": "",
"group": 7,
"flag": 1,
"index": 46
},
{
"key": "sso_client_secret",
"value": "",
"help": "",
"type": "string",
"options": "",
"group": 7,
"flag": 1,
"index": 47
},
{
"key": "sso_oidc_username_key",
"value": "name",
"help": "",
"type": "string",
"options": "",
"group": 7,
"flag": 1,
"index": 48
},
{
"key": "sso_organization_name",
"value": "",
"help": "",
"type": "string",
"options": "",
"group": 7,
"flag": 1,
"index": 49
},
{
"key": "sso_application_name",
"value": "",
"help": "",
"type": "string",
"options": "",
"group": 7,
"flag": 1,
"index": 50
},
{
"key": "sso_endpoint_name",
"value": "",
"help": "",
"type": "string",
"options": "",
"group": 7,
"flag": 1,
"index": 51
},
{
"key": "sso_jwt_public_key",
"value": "",
"help": "",
"type": "string",
"options": "",
"group": 7,
"flag": 1,
"index": 52
},
{
"key": "sso_extra_scopes",
"value": "",
"help": "",
"type": "string",
"options": "",
"group": 7,
"flag": 1,
"index": 53
},
{
"key": "sso_auto_register",
"value": "false",
"help": "",
"type": "bool",
"options": "",
"group": 7,
"flag": 1,
"index": 54
},
{
"key": "sso_default_dir",
"value": "/",
"help": "",
"type": "string",
"options": "",
"group": 7,
"flag": 1,
"index": 55
},
{
"key": "sso_default_permission",
"value": "0",
"help": "",
"type": "number",
"options": "",
"group": 7,
"flag": 1,
"index": 56
},
{
"key": "sso_compatibility_mode",
"value": "false",
"help": "",
"type": "bool",
"options": "",
"group": 7,
"flag": 0,
"index": 57
},
{
"key": "ldap_login_enabled",
"value": "false",
"help": "",
"type": "bool",
"options": "",
"group": 8,
"flag": 0,
"index": 58
},
{
"key": "ldap_server",
"value": "",
"help": "",
"type": "string",
"options": "",
"group": 8,
"flag": 1,
"index": 59
},
{
"key": "ldap_manager_dn",
"value": "",
"help": "",
"type": "string",
"options": "",
"group": 8,
"flag": 1,
"index": 60
},
{
"key": "ldap_manager_password",
"value": "",
"help": "",
"type": "string",
"options": "",
"group": 8,
"flag": 1,
"index": 61
},
{
"key": "ldap_user_search_base",
"value": "",
"help": "",
"type": "string",
"options": "",
"group": 8,
"flag": 1,
"index": 62
},
{
"key": "ldap_user_search_filter",
"value": "(uid=%s)",
"help": "",
"type": "string",
"options": "",
"group": 8,
"flag": 1,
"index": 63
},
{
"key": "ldap_default_dir",
"value": "/",
"help": "",
"type": "string",
"options": "",
"group": 8,
"flag": 1,
"index": 64
},
{
"key": "ldap_default_permission",
"value": "0",
"help": "",
"type": "number",
"options": "",
"group": 8,
"flag": 1,
"index": 65
},
{
"key": "ldap_login_tips",
"value": "login with ldap",
"help": "",
"type": "string",
"options": "",
"group": 8,
"flag": 0,
"index": 66
},
{
"key": "s3_access_key_id",
"value": "",
"help": "",
"type": "string",
"options": "",
"group": 9,
"flag": 1,
"index": 67
},
{
"key": "s3_secret_access_key",
"value": "",
"help": "",
"type": "string",
"options": "",
"group": 9,
"flag": 1,
"index": 68
},
{
"key": "s3_buckets",
"value": "[]",
"help": "",
"type": "string",
"options": "",
"group": 9,
"flag": 1,
"index": 69
},
{
"key": "ftp_public_host",
"value": "127.0.0.1",
"help": "",
"type": "string",
"options": "",
"group": 10,
"flag": 1,
"index": 70
},
{
"key": "ftp_pasv_port_map",
"value": "",
"help": "",
"type": "text",
"options": "",
"group": 10,
"flag": 1,
"index": 71
},
{
"key": "ftp_proxy_user_agent",
"value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
"help": "",
"type": "string",
"options": "",
"group": 10,
"flag": 1,
"index": 72
},
{
"key": "ftp_mandatory_tls",
"value": "false",
"help": "",
"type": "bool",
"options": "",
"group": 10,
"flag": 1,
"index": 73
},
{
"key": "ftp_implicit_tls",
"value": "false",
"help": "",
"type": "bool",
"options": "",
"group": 10,
"flag": 1,
"index": 74
},
{
"key": "ftp_tls_private_key_path",
"value": "",
"help": "",
"type": "string",
"options": "",
"group": 10,
"flag": 1,
"index": 75
},
{
"key": "ftp_tls_public_cert_path",
"value": "",
"help": "",
"type": "string",
"options": "",
"group": 10,
"flag": 1,
"index": 76
},
{
"key": "offline_download_task_threads_num",
"value": "5",
"help": "",
"type": "number",
"options": "",
"group": 11,
"flag": 1,
"index": 77
},
{
"key": "offline_download_transfer_task_threads_num",
"value": "5",
"help": "",
"type": "number",
"options": "",
"group": 11,
"flag": 1,
"index": 78
},
{
"key": "upload_task_threads_num",
"value": "5",
"help": "",
"type": "number",
"options": "",
"group": 11,
"flag": 1,
"index": 79
},
{
"key": "copy_task_threads_num",
"value": "5",
"help": "",
"type": "number",
"options": "",
"group": 11,
"flag": 1,
"index": 80
},
{
"key": "decompress_download_task_threads_num",
"value": "5",
"help": "",
"type": "number",
"options": "",
"group": 11,
"flag": 1,
"index": 81
},
{
"key": "decompress_upload_task_threads_num",
"value": "5",
"help": "",
"type": "number",
"options": "",
"group": 11,
"flag": 1,
"index": 82
},
{
"key": "max_client_download_speed",
"value": "-1",
"help": "",
"type": "number",
"options": "",
"group": 11,
"flag": 1,
"index": 83
},
{
"key": "max_client_upload_speed",
"value": "-1",
"help": "",
"type": "number",
"options": "",
"group": 11,
"flag": 1,
"index": 84
},
{
"key": "max_server_download_speed",
"value": "-1",
"help": "",
"type": "number",
"options": "",
"group": 11,
"flag": 1,
"index": 85
},
{
"key": "max_server_upload_speed",
"value": "-1",
"help": "",
"type": "number",
"options": "",
"group": 11,
"flag": 1,
"index": 86
},
{
"key": "qbittorrent_url",
"value": "http://admin:adminadmin@localhost:8080/",
"help": "",
"type": "string",
"options": "",
"group": 5,
"flag": 1,
"index": 91
},
{
"key": "qbittorrent_seedtime",
"value": "0",
"help": "",
"type": "number",
"options": "",
"group": 5,
"flag": 1,
"index": 92
},
{
"key": "transmission_uri",
"value": "http://localhost:9091/transmission/rpc",
"help": "",
"type": "string",
"options": "",
"group": 5,
"flag": 1,
"index": 87
},
{
"key": "transmission_seedtime",
"value": "0",
"help": "",
"type": "number",
"options": "",
"group": 5,
"flag": 1,
"index": 88
},
{
"key": "aria2_uri",
"value": "http://localhost:6800/jsonrpc",
"help": "",
"type": "string",
"options": "",
"group": 5,
"flag": 1,
"index": 89
},
{
"key": "aria2_secret",
"value": "",
"help": "",
"type": "string",
"options": "",
"group": 5,
"flag": 1,
"index": 90
}
],
"users": [
{
"id": 1,
"username": "admin",
"password": "",
"base_path": "/",
"role": 2,
"disabled": false,
"permission": 16383,
"sso_id": ""
},
{
"id": 2,
"username": "guest",
"password": "",
"base_path": "/",
"role": 1,
"disabled": true,
"permission": 0,
"sso_id": ""
}
],
"storages": [
{
"id": 4,
"mount_path": "/BPan",
"order": 0,
"driver": "BaiduNetdisk",
"cache_expiration": 30,
"status": "work",
"addition": "{"refresh_token":"","root_folder_path":"/","order_by":"name","order_direction":"asc","download_api":"official","client_id":"","custom_crack_ua":"pan.baidu.com","AccessToken":"","upload_thread":"6","upload_api":"https://d.pcs.baidu.com","custom_upload_part_size":5}",
"remark": "",
"modified": "2025-02-24T17:14:19.421407668Z",
"disabled": false,
"disable_index": false,
"enable_sign": false,
"order_by": "",
"order_direction": "",
"extract_folder": "",
"web_proxy": false,
"webdav_policy": "native_proxy",
"proxy_range": false,
"down_proxy_url": ""
},
{
"id": 5,
"mount_path": "/alist",
"order": 0,
"driver": "Local",
"cache_expiration": 0,
"status": "work",
"addition": "{"root_folder_path":"/mnt/alist","thumbnail":false,"thumb_cache_folder":"","thumb_concurrency":"16","video_thumb_pos":"20%","show_hidden":true,"mkdir_perm":"777","recycle_bin_path":"delete permanently"}",
"remark": "",
"modified": "2025-02-25T01:48:17.450005771Z",
"disabled": false,
"disable_index": false,
"enable_sign": false,
"order_by": "",
"order_direction": "",
"extract_folder": "",
"web_proxy": false,
"webdav_policy": "native_proxy",
"proxy_range": false,
"down_proxy_url": ""
},
{
"id": 6,
"mount_path": "/onePan",
"order": 0,
"driver": "Onedrive",
"cache_expiration": 30,
"status": "work",
"addition": "{"root_folder_path":"/","region":"global","is_sharepoint":false,"client_id":"","client_secret":"","redirect_uri":"https://alist.nn.ci/tool/onedrive/callback","refresh_token":"","site_id":"","chunk_size":5,"custom_host":""}",
"remark": "",
"modified": "2025-02-25T02:02:00.392873423Z",
"disabled": false,
"disable_index": false,
"enable_sign": false,
"order_by": "",
"order_direction": "",
"extract_folder": "",
"web_proxy": false,
"webdav_policy": "302_redirect",
"proxy_range": false,
"down_proxy_url": ""
}
],
"metas": []
}

Logs / 日志

No response

@tianli-sir tianli-sir added the bug Something isn't working label Feb 25, 2025
Copy link

@tianli-sir
Copy link
Author

Image

Image

@tianli-sir
Copy link
Author

Image

Image

@xrgzs
Copy link
Contributor

xrgzs commented Mar 4, 2025

+1,上传大文件报错

The size of the provided stream is not known. Make sure the request is not chunked, and the Content-Length header is specified

但是看代码应该是加了 Content-Length 这个头的

func (d *Onedrive) upBig(ctx context.Context, dstDir model.Obj, stream model.FileStreamer, up driver.UpdateProgress) error {
url := d.GetMetaUrl(false, stdpath.Join(dstDir.GetPath(), stream.GetName())) + "/createUploadSession"
metadata := map[string]interface{}{"item": toAPIMetadata(stream)}
res, err := d.Request(url, http.MethodPost, func(req *resty.Request) {
req.SetBody(metadata).SetContext(ctx)
}, nil)
if err != nil {
return err
}
uploadUrl := jsoniter.Get(res, "uploadUrl").ToString()
var finish int64 = 0
DEFAULT := d.ChunkSize * 1024 * 1024
for finish < stream.GetSize() {
if utils.IsCanceled(ctx) {
return ctx.Err()
}
log.Debugf("upload: %d", finish)
var byteSize int64 = DEFAULT
left := stream.GetSize() - finish
if left < DEFAULT {
byteSize = left
}
byteData := make([]byte, byteSize)
n, err := io.ReadFull(stream, byteData)
log.Debug(err, n)
if err != nil {
return err
}
req, err := http.NewRequest("PUT", uploadUrl, driver.NewLimitedUploadStream(ctx, bytes.NewBuffer(byteData)))
if err != nil {
return err
}
req = req.WithContext(ctx)
req.Header.Set("Content-Length", strconv.Itoa(int(byteSize)))
req.Header.Set("Content-Range", fmt.Sprintf("bytes %d-%d/%d", finish, finish+byteSize-1, stream.GetSize()))
finish += byteSize
res, err := base.HttpClient.Do(req)
if err != nil {
return err
}
// https://learn.microsoft.com/zh-cn/onedrive/developer/rest-api/api/driveitem_createuploadsession
if res.StatusCode != 201 && res.StatusCode != 202 && res.StatusCode != 200 {
data, _ := io.ReadAll(res.Body)
res.Body.Close()
return errors.New(string(data))
}
res.Body.Close()
up(float64(finish) * 100 / float64(stream.GetSize()))
}
return nil
}

@xrgzs
Copy link
Contributor

xrgzs commented Mar 4, 2025

@tianli-sir 请问用的是不是个人版或者家庭版?

@xrgzs
Copy link
Contributor

xrgzs commented Mar 4, 2025

找到问题了,就是 Content-Length 没传对

@xrgzs xrgzs linked a pull request Mar 4, 2025 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants