<feed xmlns='http://www.w3.org/2005/Atom'>
<title>coinos-server.git/lib/upload.ts, branch master</title>
<subtitle>coinos server — legacy coinos.io backend (Lightning, on-chain, Liquid)</subtitle>
<id>https://git.coinos.io/coinos-server.git/atom?h=master</id>
<link rel='self' href='https://git.coinos.io/coinos-server.git/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/'/>
<updated>2026-09-27T05:45:43Z</updated>
<entry>
<title>upload: decode images in a throwaway child process and tighten input checks</title>
<updated>2026-09-27T05:45:43Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-09-27T05:45:43Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=0912f443cc738af7dd7093670f00420de72a095f'/>
<id>urn:sha1:0912f443cc738af7dd7093670f00420de72a095f</id>
<content type='text'>
Malformed HEIF uploads were corrupting the heap inside libvips/libheif and
taking the whole app down with them, since sharp ran in-process. Move the
decode into a per-upload child (lib/image-worker.ts, spawned by lib/image.ts
with a hard timeout) so a decoder crash fails one request instead of the
server, and never load sharp in the main process.

Also: only accept jpeg/png/webp/gif as sniffed by file-type instead of any
image/* subtype, decode with failOnError and a pixel cap, refuse uploads
from blacklisted accounts (a freeze previously only blocked sends), and
rate-limit uploads per account.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>picture not profile</title>
<updated>2025-01-01T00:52:14Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2025-01-01T00:52:14Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=e2db9a0e0fad4cb107e1bb4fee32b0618f6bae26'/>
<id>urn:sha1:e2db9a0e0fad4cb107e1bb4fee32b0618f6bae26</id>
<content type='text'>
</content>
</entry>
<entry>
<title>biome lint</title>
<updated>2024-10-31T16:34:42Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2024-10-31T16:29:04Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=aa4cd39c943b67169def224e224bd07b815b70ec'/>
<id>urn:sha1:aa4cd39c943b67169def224e224bd07b815b70ec</id>
<content type='text'>
</content>
</entry>
<entry>
<title>rm logs</title>
<updated>2024-10-12T05:37:32Z</updated>
<author>
<name>Adam Soltys</name>
<email>asoltys@gmail.com</email>
</author>
<published>2024-10-12T05:37:14Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=01a25a3d490d905b93e448b5a8d49545de304de7'/>
<id>urn:sha1:01a25a3d490d905b93e448b5a8d49545de304de7</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix upload endpoint</title>
<updated>2024-09-06T23:18:53Z</updated>
<author>
<name>Adam Soltys</name>
<email>asoltys@gmail.com</email>
</author>
<published>2024-09-06T23:18:53Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=1d5aa728046adf6cd6ca11483909406ac7195d3b'/>
<id>urn:sha1:1d5aa728046adf6cd6ca11483909406ac7195d3b</id>
<content type='text'>
</content>
</entry>
<entry>
<title>typescript</title>
<updated>2024-08-27T04:17:43Z</updated>
<author>
<name>Adam Soltys</name>
<email>asoltys@gmail.com</email>
</author>
<published>2024-08-27T04:17:43Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=fe62cadd6fb4a7e49f7d59401fc74ae0411e32a7'/>
<id>urn:sha1:fe62cadd6fb4a7e49f7d59401fc74ae0411e32a7</id>
<content type='text'>
</content>
</entry>
</feed>
