libretro / libretro/RetroArch

[VITA] WebDAV Cloud Sync reaches 100% but always finishes with failures and uploads nothing (Vita has no SSL/TLS support?)

Open
#19,475 6 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
C
Stars
14.1k
Forks
2.2k
Avg merge
7h 35m
Merged PRs (30d)
51

Description

Is there an existing issue for this?
  • This is a bug in RetroArch frontend
  • I have searched the existing issues
Description

RetroArch Cloud Sync on the PS Vita is unable to synchronize files to a WebDAV server.

The synchronization process starts and reaches 100%, but always ends with:

Cloud Sync finished with failures

No files are created or uploaded to the WebDAV server, including when testing against a completely empty directory.

I tested this with pCloud WebDAV. The same pCloud WebDAV account works correctly with RetroArch on PC.

There appears to be a PS Vita-specific WebDAV/Cloud Sync problem.

Environment

  • Platform: PlayStation Vita
  • Vita model: PCH-1000
  • RetroArch: latest official Vita nightly/build currently installed
  • Cloud Sync backend: WebDAV
  • WebDAV provider: pCloud
  • Connection: Wi-Fi
  • Sync types tested: Saves and Save States
  • Config synchronization: disabled during testing
  • Thumbnails/System synchronization: disabled
  • Conflict resolution: tested with both "Keep Local" and "Keep Server"

WebDAV configuration

The pCloud WebDAV endpoint was tested using HTTPS first.

With:

https://...

the Vita does not successfully begin the synchronization.

When the s is removed and HTTP is used instead:

http://...

the synchronization process begins and progresses normally to 100%, but then reports:

Cloud Sync finished with failures

However, the WebDAV server remains completely unchanged.

Reproduction steps

  1. Create a new, completely empty directory on the pCloud WebDAV server.

  2. Configure RetroArch on the PS Vita to use this directory as the Cloud Sync destination.

  3. Enable only:

    • Sync Saves
    • Sync Save States
  4. Disable:

    • Config synchronization
    • Thumbnails
    • System directory
  5. Put one known-working RetroArch save on the Vita.

  6. Start Cloud Sync manually using "Sync Now".

  7. Allow synchronization to reach 100%.

Result

RetroArch reports:

Cloud Sync finished with failures

The WebDAV directory remains completely empty.

No save file is uploaded and no apparent server-side manifest is created.

Additional testing

I also tested the conflict-resolution options:

  • Keep Local
  • Keep Server

Neither option changes the result.

I also deleted all files from the server and repeated the test against a completely empty directory. The problem remains identical.

This therefore does not appear to be caused by an existing server manifest, stale files, or a save conflict.

PC comparison

The same pCloud account/WebDAV service works correctly with RetroArch on my Windows PC.

The PC is able to synchronize RetroArch files to the same cloud storage.

Therefore:

PC RetroArch → pCloud WebDAV = WORKS

PS Vita RetroArch → pCloud WebDAV = FAILS

Important observation

The PS Vita appears to have different behavior depending on whether HTTPS or HTTP is used.

HTTPS:

  • Synchronization does not successfully start.

HTTP:

  • Synchronization starts.
  • Progress reaches 100%.
  • RetroArch reports "Cloud Sync finished with failures".
  • No files appear on the WebDAV server.

This makes me suspect a problem in the Vita WebDAV/Cloud Sync implementation, potentially involving HTTPS/TLS handling and/or the final WebDAV upload/manifest operation.

Expected behavior

Expected behavior

After synchronization completes successfully, the WebDAV directory should contain the synchronized RetroArch data, such as the save file and Cloud Sync manifest.

For example:

<cloud directory>/...save file...

and the corresponding Cloud Sync manifest/state.

Actual behavior

Synchronization reaches 100% but reports failure, and the server directory remains completely empty.

Related issue

This may be related to #19457:

"Cloud Sync (WebDAV): uploads succeed on the server but report HTTP -1, so the sync is marked as failed"

However, my case appears to be specifically reproducible on the PS Vita, where no files are visible on the server after the failed synchronization.

Possible areas to investigate

Could the Vita WebDAV implementation be checked for:

  1. HTTPS/TLS support and certificate handling.
  2. HTTP/WebDAV PUT requests.
  3. WebDAV response/error handling.
  4. manifest.server creation/upload.
  5. HTTP status handling where a successful WebDAV operation may be interpreted as an error.
  6. Differences between the Vita WebDAV backend and desktop WebDAV implementations.

Reproduction reliability

The problem is reproducible consistently.

The test was performed using a completely empty server directory and only a single RetroArch save, so this does not appear to be related to a large cloud library or complicated synchronization state.

I would be happy to provide a RetroArch debug log if needed.

Steps to reproduce the bug

just trying to sync with webdav using the retroarch psvita produces the bug, pc version works as intended

Version/Commit

latest

Bisect Results

No response

Present in the nightly version

Yes, this is reproduced in the nightly build

Platform & operating system

Windows 11 Pro 25H2, and PSVITA 1000

Affected Cores

syncing issue, not core issues

Environment information

modded psvita 1000

Relevant log output
[WARN] [webdav] Failed: http://webdav.pcloud.com/RetroArch-Vita-Test/: HTTP -1
[WARN] [CloudSync] Begin failed.
[WARN] [webdav] Failed: http://webdav.pcloud.com/RetroArch-Vita-Test/: HTTP -1
[WARN] [CloudSync] Begin failed.
[WARN] [webdav] Failed: http://webdav.pcloud.com/RetroArch-Vita-Test/: HTTP -1
[WARN] [CloudSync] Begin failed.
[INFO] [CloudSync] Already in progress.
[INFO] [CloudSync] Begin succeeded.
[DEBUG] [webdav] GET http://webdav.pcloud.com/RetroArch-Vita-Test/manifest.server
[INFO] [CloudSync] Server manifest fetch succeeded.
[INFO] [CloudSync] Created manifest with 0 files.
[INFO] [CloudSync] Created in-memory manifest of current disk state with 143 files.
[INFO] [CloudSync] Uploading "saves/0755 - Metroid - Fusion (E)(FlashAdvance).srm".
[DEBUG] [webdav] MKCOL http://webdav.pcloud.com/RetroArch-Vita-Test/saves/
[INFO] [CloudSync] Uploading "saves/2048/0755 - Metroid - Fusion (E)(FlashAdvance).srm".
[DEBUG] [webdav] MKCOL http://webdav.pcloud.com/RetroArch-Vita-Test/saves/
[DEBUG] [webdav] MKCOL http://webdav.pcloud.com/RetroArch-Vita-Test/saves/ success
[DEBUG] [webdav] PUT http://webdav.pcloud.com/RetroArch-Vita-Test/saves/0755%20-%20Metroid%20-%20Fusion%20%28E%29%28FlashAdvance%29.srm
[DEBUG] [webdav] MKCOL http://webdav.pcloud.com/RetroArch-Vita-Test/saves/2048/
[DEBUG] [webdav] MKCOL http://webdav.pcloud.com/RetroArch-Vita-Test/saves/2048/ success
[DEBUG] [webdav] PUT http://webdav.pcloud.com/RetroArch-Vita-Test/saves/2048/0755%20-%20Metroid%20-%20Fusion%20%28E%29%28FlashAdvance%29.srm
[WARN] [webdav] Failed: saves/2048/0755 - Metroid - Fusion (E)(FlashAdvance).srm: HTTP 405
[WARN] Date: Sun, 30 Aug 2026 12:54:56 GMT
[WARN] Server: Apache/2.4.65 (Debian)
[WARN] Allow: GET,POST,OPTIONS,HEAD
[WARN] Content-Length: 303
[WARN] Content-Type: text/html; charset=iso-8859-1
[WARN] <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>405 Method Not Allowed</title>
</head><body>
<h1>Method Not Allowed</h1>
<p>The requested method PUT is not allowed for this URL.</p>
<hr>
<address>Apache/2.4.65 (Debian) Server at webdav.pcloud.com Port 80</address>
</body></html>

[WARN] [CloudSync] Uploading "saves/2048/0755 - Metroid - Fusion (E)(FlashAdvance).srm" failed.
[WARN] [webdav] Failed: saves/0755 - Metroid - Fusion (E)(FlashAdvance).srm: HTTP 405
[WARN] Date: Sun, 30 Aug 2026 12:54:54 GMT
[WARN] Server: Apache/2.4.65 (Debian)
[INFO] [CloudSync] Uploading "saves/[WARN] Content-Length: 303
g "saves/Gambatte/Backup/Embers of Mana.sav".
[WARN] Content-Length: 303
[WARN] Content-Type: text/html; charset=iso-8859-1
[DEBUG] [webdav] MKCOL http://webdav.pcloud.com/RetroArch-Vita-Test/saves/
le>405 Method Not Allowed</title>
</head><body>
<h1>Method Not Allowed</h1>
<p>The requested method PUT is not allowed for this URL.</p>
<hr>
<address>Apache/2.4.65 (Debian) Server at webdav.pcloud.com Port 80</address>
</body></html>

[DEBUG] [webdav] MKCOL http://webdav.pcloud.com/RetroArch-Vita-Test/saves/
[WARN] [CloudSync] Uploading "saves/0755 - Metroid - Fusion (E)(FlashAdvance).srm" failed.
[INFO] [CloudSync] Uploading "saves/Gambatte/Backup/Embers of Mana.sav.gz".
[DEBUG] [webdav] MKCOL http://webdav.pcloud.com/RetroArch-Vita-Test/saves/
[DEBUG] [webdav] MKCOL http://webdav.pcloud.com/RetroArch-Vita-Test/saves/Gambatte/
[DEBUG] [webdav] MKCOL http://webdav.pcloud.com/RetroArch-Vita-Test/saves/Gambatte/
[INFO] [CloudSync] Uploading "saves/Gambatte/Backup/Embers of Mana.sv0".
[DEBUG] [webdav] MKCOL http://webdav.pcloud.com/RetroArch-Vita-Test/saves/Gambatte/Backup/
[DEBUG] [webdav] MKCOL http://webdav.pcloud.com/RetroArch-Vita-Test/saves/
[DEBUG] [webdav] MKCOL http://webdav.pcloud.com/RetroArch-Vita-Test/saves/Gambatte/Backup/ success
[DEBUG] [webdav] PUT http://webdav.pcloud.com/RetroArch-Vita-Test/saves/Gambatte/Backup/Embers%20of%20Mana.sav
[DEBUG] [webdav] MKCOL http://webdav.pcloud.com/RetroArch-Vita-Test/saves/Gambatte/Backup/
[DEBUG] [webdav] MKCOL http://webdav.pcloud.com/RetroArch-Vita-Test/saves/Gambatte/
[WARN] [webdav] Failed: saves/Gambatte/Backup/Embers of Mana.sav: HTTP 405
[WARN] Date: Sun, 30 Aug 2026 12:54:58 GMT
[WARN] Server: Apache/2.4.65 (Debian)
[WARN] Allow: GET,POST,OPTIONS,HEAD
[WARN] Content-Length: 303
[WARN] Content-Type: text/html; charset=iso-8859-1
[WARN] <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>405 Method Not Allowed</title>
</head><body>
<h1>Method Not Allowed</h1>
<p>The requested method PUT is not allowed for this URL.</p>
<hr>
<address>Apache/2.4.65 (Debian) Server at webdav.pcloud.com Port 80</address>
</body></html>

[WARN] [CloudSync] Uploading "saves/Gambatte/Backup/Embers of Mana.sav" failed.
[DEBUG] [webdav] MKCOL http://webdav.pcloud.com/RetroArch-Vita-Test/saves/Gambatte/Backup/ success
[DEBUG] [webdav] PUT http://webdav.pcloud.com/RetroArch-Vita-Test/saves/Gambatte/Backup/Embers%20of%20Mana.sav.gz
[DEBUG] [webdav] MKCOL http://webdav.pcloud.com/RetroArch-Vita-Test/saves/Gambatte/Backup/
[WARN] [webdav] Failed: saves/Gambatte/Backup/Embers of Mana.sav.gz: HTTP 405
[WARN] Date: Sun, 30 Aug 2026 12:54:59 GMT
[WARN] Server: Apache/2.4.65 (Debian)
[WARN] Allow: GET,POST,OPTIONS,HEAD
[WARN] Content-Length: 303
[WARN] Content-Type: text/html; charset=iso-8859-1
[WARN] <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>405 Method Not Allowed</title>
</head><body>
<h1>Method Not Allowed</h1>
<p>The requested method PUT is not allowed for this URL.</p>
<hr>
<address>Apache/2.4.65 (Debian) Server at webdav.pcloud.com Port 80</address>
</body></html>

[WARN] [CloudSync] Uploading "saves/Gambatte/Backup/Embers of Mana.sav.gz" failed.
[INFO] [CloudSync] Uploading "saves/Gambatte/Backup/Embers of Mana.sv0.gz".
[DEBUG] [webdav] MKCOL http://webdav.pcloud.com/RetroArch-Vita-Test/saves/Gambatte/Backup/ success
[DEBUG] [webdav] PUT http://webdav.pcloud.com/RetroArch-Vita-Test/saves/Gam[DEBUG] [webdav] PUT http://webdav.pcloud.com/RetroArch-Vita-Test/saves/Gambatte/Backup/Embers%20of%20Mana.sv0
[DEBUG] [webdav] MKCOL http://webdav.pcloud.com/RetroArch-Vita-Test/saves/Gambatte/
[WARN] [webdav] Failed: saves/Gambatte/Backup/Embers of Mana.sv0: HTTP 405
[WARN] Date: Sun, 30 Aug 2026 12:55:00 GMT
[WARN] Server: Apache/2.4.65 (Debian)
[WARN] Allow: GET,POST,OPTIONS,HEAD
[WARN] Content-Length: 303
[WARN] Content-Type: text/html; charset=iso-8859-1
[WARN] <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>405 Method Not Allowed</title>
</head><body>
<h1>Method Not Allowed</h1>
<p>The requested method PUT is not allowed for this URL.</p>
<hr>
<address>Apache/2.4.65 (Debian) Server at webdav.pcloud.com Port 80</address>
</body></html>

[WARN] [CloudSync] Uploading "saves/Gambatte/Backup/Embers of Mana.sv0" failed.
[INFO] [CloudSync] Uploading "saves/Gambatte/Backup/Embers of Mana.tn0.png".
[DEBUG] [webdav] MKCOL http://webdav.pcloud.com/RetroArch-Vita-Test/saves/
[DEBUG] [webdav] MKCOL http://webdav.pcloud.com/RetroArch-Vita-Test/saves/Gambatte/Backup/
[DEBUG] [webdav] MKCOL http://webdav.pcloud.com/RetroArch-Vita-Test/saves/Gambatte/
[DEBUG] [webdav] MKCOL http://webdav.pcloud.com/RetroArch-Vita-Test/saves/Gambatte/Backup/ success
[DEBUG] [webdav] PUT http://webdav.pcloud.com/RetroArch-Vita-Test/saves/Gambatte/Backup/Embers%20of%20Mana.sv0.gz
[WARN] [webdav] Failed: saves/Gambatte/Backup/Embers of Mana.sv0.gz: HTTP 405
[WARN] Date: Sun, 30 Aug 2026 12:55:01 GMT
[WARN] Server: Apache/2.4.65 (Debian)
[WARN] Allow: GET,POST,OPTIONS,HEAD
[WARN] Content-Length: 303
[WARN] Content-Type: text/html; charset=iso-8859-1
[WARN] <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>405 Method Not Allowed</title>
</head><body>
<h1>Method Not Allowed</h1>
<p>The requested method PUT is not allowed for this URL.</p>
<hr>
<address>Apache/2.4.65 (Debian) Server at webdav.pcloud.com Port 80</address>
</body></html>

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by tracing the PS Vita WebDAV and Cloud Sync PUT path, using the supplied log as the reproduction case. Compare that path with the working desktop behavior and verify the fix by rerunning the empty-directory test; done means the save files and manifest are uploaded without failures.

Written by the indexing model from the issue text.

Assessment

Tech stack
c
Domain
cloud
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.