github toniebox-reverse-engineering/teddycloud tc_v0.7.1
TeddyCloud Release v0.7.1

3 hours ago

Sponsors

We thank all our current monthly sponsors and the one-time sponsors!

What's Changed

  • Re-enable AddressSanitizer on aarch64 via native arm64 runners by @aflores-qb in #461
  • docs: describe web radio streaming and its tuning settings by @alexander-wenzel-dev in #480
  • fix: keep serving stream files past the first EOF by @alexander-wenzel-dev in #478
  • perf: skip encoding for range requests that force a box restart by @alexander-wenzel-dev in #479
  • feat: track listened status for library files by @pladux in #467
  • feat: add optional web UI login with cookie sessions by @ditschi in #482
  • fix(server): clear authenticated on every pooled connection reuse by @emka in #477
  • fix(server): stop logging web UI bearer tokens as parse failures by @ditschi in #486
  • fix: allow base URL redirect to web UI when web login is enabled by @ditschi in #487
  • feat: export selected TAF tracks as Ogg or Zip by @ditschi in #484
  • fix: handle CORS preflight requests for Web API by @henryk86 in #490
  • feat: remove legacy admin GUI by @ian0318git in #491
  • fix(cache): avoid NULL deref on /cache/ lookup of the list head by @mrueg in #499
  • fix(multipart): reject empty boundary and clamp data-end length by @mrueg in #502
  • fix(esp32 upload): fix use-after-free and NULL deref in firmware upload by @mrueg in #503
  • fix(toniefile): avoid double pclose of the ffmpeg pipe by @mrueg in #501
  • fix(api): bound source list and path length in /api/fileEncode by @mrueg in #494
  • fix(toniefile): prevent shell command injection via ffmpeg source by @mrueg in #504
  • fix(api): never expose secret settings through getIndex by @mrueg in #505
  • fix(web,tonies): close download file once in body callbacks by @mrueg in #500
  • fix(handler): stream passthrough headers instead of fixed stack buffers by @mrueg in #498
  • fix(cloud): bound URL parsing in split_url against redirect Location by @mrueg in #497
  • fix(esp32): prevent stack overflow parsing crafted NVS partitions by @mrueg in #496
  • fix(rtnl): bound hex/escape output in RTNL log handlers by @mrueg in #493
  • fix(tap): bound file count and path copies in TAP playlists by @mrueg in #495
  • fix(esp32): abort NVS parsing when an item span is zero by @mrueg in #506
  • fix(cert): write private-key files with 0600 permissions by @mrueg in #512
  • fix(net): bound the 16-bit word index when parsing "::" in IPv6 by @mrueg in #511
  • fix(security): run blacklist and crawler mitigations independently by @mrueg in #508
  • fix(tap): free resolved file path in tap_free by @mrueg in #507
  • fix(web): require HTTP 200 for a successful web_download by @mrueg in #509
  • fix(api): strip leading ".." in sanitizePath to stop path traversal by @mrueg in #513
  • fix(rtnl): validate field6 length before reading box-supplied data by @mrueg in #514
  • fix(http): validate Range and free Content-Range buffer by @mrueg in #515
  • fix(toniefile): guard TAF append against open failure and bad header by @mrueg in #516
  • fix(http): drop off-by-one in User-Agent copy by @mrueg in #517
  • fix(tls): free cert buffers on name-constraint rejection by @mrueg in #518
  • fix(tonies): bound tracks loop to the allocated count by @mrueg in #519
  • fix(mqtt): bound topic/instance formatting with osSnprintf by @mrueg in #520
  • fix(cloud): reject non-hex hash in V3 OTA requests by @mrueg in #521
  • fix(esp32): validate filename and MAC in extractCerts by @mrueg in #522
  • fix(http): guard TAF-header skip against short files by @mrueg in #523
  • fix: stop file read loops from spinning on short/failed reads by @mrueg in #524
  • fix(fs): guard fsRemoveFilename against an empty string by @mrueg in #525
  • fix(content): free parsed fields before reloading on version mismatch by @mrueg in #526
  • fix(cache): don't leak a duplicate entry in cache_add by @mrueg in #527
  • perf(settings): look up options by name with a sorted index + bsearch by @mrueg in #528
  • perf(api): move 405 KB encode source array off the request stack by @mrueg in #529
  • fix(tls): no session resumption where boxes authenticate by certificate by @Oaradla in #533
  • fix(certs): uploads for a new box go to its own directory by @Oaradla in #534
  • feat(esp32): patch the port the box connects to by @Oaradla in #535
  • feat: add total audio length to TAF info by @ditschi in #537
  • Bump actions/cache from 4 to 6 by @dependabot[bot] in #550
  • Fix request line swallowing the header when the first read fills the buffer by @zimmermq in #546
  • fix(test): run the key-permission hardening test against the sandbox by @ditschi in #539
  • docker: drop privileges by numeric uid:gid so PUID collisions don't break startup by @jakeyr in #541
  • Fix SSE deadlock between keep-alive and box events by @zimmermq in #547
  • cloud: answers the boxes accept: claim 204, /v1/log answered, cloud time checked by @Oaradla in #542
  • Send the SSE response header before the subscriber gets events by @zimmermq in #548
  • feat(server): check box certificates by @Oaradla in #536
  • Honor tracks= on /content/download for tag track export by @ditschi in #553
  • Return 400 for an invalid track selection by @ditschi in #554
  • Write the track export zip in-process (UTF-8 names, no zip binary) by @ditschi in #555
  • ci: release candidates with their own tag prefix (rc_vX.Y.Z[-N|-rcN])… by @SciLor in #560
  • Add reverse target for teddycloud release candidate by @henryk86 in #562

What's Changed Web

New Contributors

Full Changelog: tc_v0.7.0...tc_v0.7.1
Full Changelog: https://github.com/toniebox-reverse-engineering/teddycloud_web/commits/tcw_v0.7.1
Detailed Changelog

Docker Image

Ubuntu: ghcr.io/toniebox-reverse-engineering/teddycloud:tc_v0.7.1
Ubuntu: ghcr.io/toniebox-reverse-engineering/teddycloud:tc_v0.7.1_ubuntu
Debian: ghcr.io/toniebox-reverse-engineering/teddycloud:tc_v0.7.1_debian
Alpine (no sanitize features, experimental, not recommended): ghcr.io/toniebox-reverse-engineering/teddycloud:tc_v0.7.1_alpine

Don't miss a new teddycloud release

NewReleases is sending notifications on new releases.