prpc.c: - on_request: fix total_size computation. The original formula sizeof(uint32_t)+sizeof(uint64_t)+response->length had two bugs: (1) sizeof(uint32_t)+sizeof(uint64_t)=12 but offsetof(rpc_message_t,value)=16 due to struct alignment padding between the uint32_t type and uint64_t length fields; and (2) respond() was storing full message size in response->length, double-counting the header. Fix: use offsetof(rpc_message_t,value)+response->length, consistent with readResponse() in rpcclient.cpp which reads a fixed header_size of offsetof(rpc_message_t,value) bytes then reads msg->length payload bytes. - respond: store payload length only in response->length (value_length+1), not full message size, to match the client protocol expectation. - prpc_init: add null check on malloc return value. - prpc_register: restore old handler table and return -1 if prpc_init fails. papi.c: - papi_result_thread: add missing MAX_API_RESPONSE_SIZE guard (present in papi_result but absent here), preventing server-controlled unbounded malloc. - papi_result, papi_result_thread: add null checks on malloc before passing pointer to psock_readall. - papi_result_async: add MAX_API_RESPONSE_SIZE check and malloc null check on reader->respsize path. - calc_ret_len: add _NEED_DATA(1) guard before ARRAY and HASH while-loop conditions; empty containers with datalen=0 caused out-of-bounds read. Co-authored-by: Levi Neely <lkn@darkstar.example.net> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|---|---|---|
| .github/workflows | ||
| dev | ||
| doc | ||
| pclsync | ||
| tests | ||
| .clang-format | ||
| .envrc | ||
| .gitignore | ||
| CLI11.hpp | ||
| LOG-MANAGEMENT.md | ||
| Makefile | ||
| README.md | ||
| control_tools.cpp | ||
| control_tools.h | ||
| default.nix | ||
| flake.lock | ||
| flake.nix | ||
| main.cpp | ||
| pcloudcc.logrotate | ||
| pclsync_lib.cpp | ||
| pclsync_lib.h | ||
| rpcclient.cpp | ||
| rpcclient.h | ||
README.md
Introduction
pcloudcc is simple linux console client for pCloud cloud storage derived from the console-client developed by pCloud. This version is independently maintained by me, whose only affiliation with pCloud is as a user of their services. Due credit goes to Anton Titov, Ivan Stoev, and pCloud.
Supported Platforms & Distributions
The target operating system and platform for this program is linux/amd64, and has been reported to work on linux/aarch64. Program behavior on 32-bit architectures is considered undefined.
I aim to support as many distributions as possible. I maintain a package for AUR and Nix. I do not plan on providing or maintaining any other packages, but encourage anyone interested in doing so for their own distributions.
Notices
Security Notice
My code audits are best-effort, and I make security enhancements as I identify problems. However, I do not promise that this program is free of even older and well-known security vulnerabilities. Therefore, I recommend using this program only on a trusted single-user system. Security-related code audits and contributions are most welcome!
See Also
-
Contributing: Read this if you're interested in helping out. Short version: do your best to write good code, be courteous to maintainers, and most importantly: have fun!
-
Building: Read this if you're not sure how to build
pcloudcc. For most users,makeandmake installare enough. -
mbedtls 3.x migration notes: Read this if you use an older distribution such as
debian:bookwormand encounter build problems. -
Device Validation Guide: Read this if you're running
pcloudccand encounter device validation-related errors. -
Usage Guide: Read this if you're unsure how to start using
pcloudcc. -
Log Management Guide: Read this to configure log rotation, cache size limits, and custom log paths. To set up automatic log rotation, copy
pcloudcc.logrotateto/etc/logrotate.d/pcloudcc. -
pcloudcc-service: Container-based systemd service for running
pcloudccin userspace with podman. Includes multi-stage Dockerfile that buildspcloudccfrom source and Quadlet systemd unit for automated background syncing.