Skip to content
View hsdfat's full-sized avatar
🎯
Focusing
🎯
Focusing

Block or report hsdfat

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
hsdfat/README.md

Phat Le (hsdfat)

Go and Rust engineer working on real-time media: WebRTC, RTSP, HLS and the RTP plumbing underneath, after several years building 5G core network functions. I send the production bugs I hit upstream.

Upstream contributions

96 merged pull requests (1 later reverted) across 41 upstream projects totalling 485.7k stars · 43 in review

Browse every merged and open upstream pull request

Merged

Project ★ PR Contribution
caddyserver/caddy 79.1k #8063 caddyauth: support third-party hash modules
rclone/rclone 61k #9693 fserrors: make http2 "server sent GOAWAY" a retriable error - fixes #96…
rclone/rclone 61k #9751 operations: check checksums in rcat with known size - fixes #6305
rclone/rclone 61k #9868 dropbox: fix shared folder mount for roots nested more than one level d…
rclone/rclone 61k #9869 dropbox: match shared-folder and received-file names case-insensitively
rclone/rclone 61k #9870 serve docker: fix volume path being lost when the plugin restarts
rclone/rclone 61k #9872 fs/config: only run --password-command once when using --daemon
rclone/rclone 61k #9944 operations: make --immutable work with copyto, moveto and single file c…
rclone/rclone 61k #9945 smb: save the user name in the config even if it matches the current us…
rclone/rclone 61k #9947 local: stop --copy-links following symlink loops - fixes #4402
rclone/rclone 61k #9949 vfs: fix AddVirtual ignoring isDir
rclone/rclone 61k #9950 serve dlna: log unescaped paths - fixes #7370
rclone/rclone 61k #9977 docker: add mailcap for /etc/mime.types - fixes #6384
rclone/rclone 61k #10057 lib/batcher: log when committing uploads has finished - fixes #5564
rclone/rclone 61k #10220 serve sftp: fix rmdir deleting a file instead of returning an error
rclone/rclone 61k #10221 serve dlna: fix crash on Browse with a negative StartingIndex or Reques…
go-gitea/gitea 59.1k #38693 fix(lfs): failed upload deletes a concurrent upload's meta object
alibaba/open-code-review 51.8k #501 feat(allowlist): add Julia (.jl) support
nushell/nushell 41k #19092 Clear sqlite history with SQL instead of deleting the file
seaweedfs/seaweedfs 36.1k #10656 s3api: fix ListObjectsV2 dropping objects under a partial prefix
seaweedfs/seaweedfs 36.1k #11393 fix(volume): return an error instead of panicking on a corrupt needle s…
seaweedfs/seaweedfs 36.1k #11397 fix(volume): return an error instead of 201 when a write lands on no vo…
seaweedfs/seaweedfs 36.1k #11398 fix(volume): stop ScanVolumeFileFrom at a header it cannot advance past
seaweedfs/seaweedfs 36.1k #11399 fix(volume): validate sizes in ReadNeedleBlob and WriteNeedleBlob
seaweedfs/seaweedfs 36.1k #11483 fix(volume-rust): reserve a disk before replacing a replica in VolumeCo…
seaweedfs/seaweedfs 36.1k #12269 fix(volume): reject a negative suffix length in Range headers
seaweedfs/seaweedfs 36.1k #12270 fix(s3): reject non-integer max-parts, part-number-marker and max-uploa…
grpc-ecosystem/grpc-gateway 20k #7110 docs: add runnable OpenTelemetry tracing example
grpc-ecosystem/grpc-gateway 20k #7207 fix(openapiv2): omit oneof siblings of path parameters from query param…
influxdata/telegraf 17.9k #20085 feat(inputs.jenkins): Allow adding build display name and description a…
argoproj/argo-workflows 17.1k #16602 perf(executor): read resource once for outputs (fixes #5658)
IBM/sarama 12.5k #3752 fix(client): only deregister the broker registered under that ID
IBM/sarama 12.5k #3852 fix(protocol): don't send an unclean election as ElectLeaders v0
kubeshark/kubeshark 12.1k #1956 helm: use Recreate strategy for hub Deployment when local snapshots PVC…
shirou/gopsutil 11.9k #2143 [docker][linux]: support cgroup v2 in Cgroup* functions
shirou/gopsutil 11.9k #2163 [cpu][darwin]: don't crash in getFrequency when pmgr lacks voltage-stat…
shirou/gopsutil 11.9k #2190 [disk][linux]: decode only \ooo escapes in mount points
shirou/gopsutil 11.9k #2191 [net][linux]: fix IPv6 address decoding on big-endian hosts
velero-io/velero 10.4k #10212 Fix Zip Slip path check accepting a sibling directory in archive extrac…
anchore/syft 9.9k #5121 fix(binary): match istio snapshot and older pre-release versions
woodpecker-ci/woodpecker 8.2k #7189 Release agents waiting on long polls during server shutdown
woodpecker-ci/woodpecker 8.2k #7192 Fix race condition on concurrent pipeline config persist
woodpecker-ci/woodpecker 8.2k #7454 Fix image tag detection for registries with a port
woodpecker-ci/woodpecker 8.2k #7501 Return log store errors to the agent, except for duplicate entries
webrtc-rs/webrtc 5.2k #954 fix(ice): use a random transaction ID for STUN Binding requests
uptrace/bun 5k #1414 fix(bunotel): honor WithMeterProvider when reporting DB stats metrics
uptrace/bun 5k #1415 fix(relation): do not duplicate joined models on a shared base model
uptrace/bun 5k #1435 fix: resolve map column types before scanning rows
uptrace/bun 5k #1466 fix: require primary keys for bulk UpdateQuery
uptrace/bun 5k #1467 fix(pgdialect): scan int64 and float64 range bounds instead of panicking
version-fox/vfox 4k #757 fix(http): send the vfox User-Agent with vfox's own requests
apache/arrow-rs 3.7k #11229 fix(parquet): support non-primitive map keys in record reader
apache/arrow-rs 3.7k #12006 fix(arrow-string): saturate the length in Utf8View/BinaryView substring
apache/arrow-rs 3.7k #12007 fix(arrow-json): reject out-of-range float timestamps instead of satura…
apache/arrow-rs 3.7k #12102 fix(arrow-cast): write timestamps whose zone offset has seconds in UTC
apache/arrow-rs 3.7k #12108 fix(parquet): return error on negative DELTA_BYTE_ARRAY lengths in arro…
apache/arrow-rs 3.7k #12215 fix(parquet): check PLAIN byte array end offsets for overflow in read
vishvananda/netlink 3.3k #1225 filter: use EncDestIPMask when encoding Flower EncDestIP
xerial/sqlite-jdbc 3.3k #1501 feat: redact encryption key pragmas in trace logs
pjsip/pjproject 2.7k #5384 pjsua: make the maximum number of transports configurable
open-telemetry/opentelemetry-operator 1.8k #5928 Update the Ingress class name on an existing Ingress
open-telemetry/opentelemetry-operator 1.8k #5929 Apply the image pull policy to Java extension init containers
open-telemetry/opentelemetry-operator 1.8k #5930 Apply the revision history limit to the collector DaemonSet
obi1kenobi/cargo-semver-checks 1.7k #1797 Add exported_function_now_variadic and exported_function_no_longer_vari…
hyperium/h2 1.6k #1002 fix: requeue released credit on recv window shrink
nginx/nginx-gateway-fabric 1.2k #5639 fix: correct validation error diagnostics and add missing CRD schema co…
bluenviron/gortsplib 948 #1171 sdp: support oversized numbers in origin (bluenviron/mediamtx#5949)
algesten/str0m 656 #1058 Limit pacer burst size at high bitrates
algesten/str0m 656 #1142 Keep ~ in sanitised msid ids
ClickHouse/clickhouse-rs 569 #478 fix(types): parse JSON type hints with parenthesized types
ClickHouse/clickhouse-rs 569 #481 fix: use a derived query ID for insert schema lookups
jonas-grgt/ktea 447 #179 feat: allow configuring the debug log location with --debug=PATH
kerlenton/mcpsnoop 368 #212 feat(check): emit SARIF 2.1.0 so findings land in the Security tab
kerlenton/mcpsnoop 368 #213 feat(cli): wrap and unwrap the Claude Desktop config for one server
gopacket/gopacket 320 #172 Reverted after merge. packet: set zeroCopy in NewZeroCopyPacketSource
fiorix/go-diameter 298 #262 diam: key the Unmarshal AVP index by {Code, VendorID}
fiorix/go-diameter 298 #275 diam: match the Vendor-Id in FindAVP, FindAVPs and FindAVPsWithPath
fiorix/go-diameter 298 #276 diam: keep only the P flag of the request in Answer
webrtc-rs/rtc 170 #314 fix(rtc): count incoming RTCP in get_stats()
webrtc-rs/rtc 170 #315 fix(ice): answer USE-CANDIDATE checks without ICE-CONTROLLING on the co…
webrtc-rs/rtc 170 #317 fix(ice): re-check a Failed pair when the remote's Binding request arri…
pyhss/pyhss 115 #337 diameterService: iterate over a snapshot of activePeers
bluenviron/mediacommon 106 #368 h265: fix DTS extraction of streams with temporal sub-layers
bluenviron/mediacommon 106 #373 pmp4: support stsz with a constant sample size (bluenviron/mediamtx#580…
bluenviron/mediacommon 106 #375 pmp4: support tracks without edts
bluenviron/mediacommon 106 #376 pmp4: return seek errors from GetPayload
bluenviron/mediacommon 106 #377 pmp4: support tracks longer than 2^32 ticks
bluenviron/mediacommon 106 #398 h264: fix SPS width when ChromaArrayType is 0
bluenviron/mediacommon 106 #399 av1: support sequence headers with initial display delay
bluenviron/mediacommon 106 #407 mpeg4video: fix crash when config ends with a start code prefix
bluenviron/mediacommon 106 #408 mpegts: read ADTS frames that span PES packets (#403)
free5gc/amf 23 #232 fix: guard non-string DNN type assertions in GMM handler
free5gc/udm 9 #96 fix(udm): return ProblemDetails for unmatched resource URIs
free5gc/tngf 5 #47 fix: prevent slice-bounds panic on malformed IKE SA proposal
free5gc/udr 4 #70 fix: return ProblemDetails for unmatched resource URIs
free5gc/ike 3 #24 fix: prevent slice-bounds panics from uint8 SPI offset overflow

In review

Project ★ PR Contribution
caddyserver/caddy 79.1k #8062 caddyhttp: Add status_code option to http_redirect listener wrapper
rclone/rclone 61k #9946 serve sftp, serve webdav: fix stale hashes reported while a file is bei…
rclone/rclone 61k #10271 fs: add --max-errors flag - fixes #4670
rclone/rclone 61k #10279 ls, lsl, lsd, lsf, lsjson: add --output-file flag - fixes #8358
wagoodman/dive 54.7k #735 fix: drop lower dir contents when a layer replaces the dir with a symli…
pingcap/tidb 40.7k #73089 server: reject malformed packets instead of panicking or stalling
bluenviron/mediamtx 20.7k #6447 playback: limit parallel segment reads in /list (#6446)
influxdata/telegraf 17.9k #20081 feat(inputs.statsd): Add unixgram support
influxdata/telegraf 17.9k #20086 feat(outputs.postgresql): Allow setting schema from a tag
influxdata/telegraf 17.9k #20087 feat(logging): Add syslog as log format
influxdata/telegraf 17.9k #20088 fix(common.opcua): Handle LocalizedText node values
influxdata/telegraf 17.9k #20089 feat(outputs.mqtt): Add last will and testament support
swaggo/swag 13.1k #2239 fix(v3): support title struct tag in OpenAPI 3.1 field parser
IBM/sarama 12.5k #3753 fix(offset): avoid deadlock when closing during a blocked commit
IBM/sarama 12.5k #3851 fix(protocol): decode compressed batches with more records than bytes
redpanda-data/connect 8.8k #4656 slack: only enforce token prefixes on literal values
webrtc-rs/webrtc 5.2k #955 fix(ice): dial passive ICE-TCP candidates carried in the remote SDP
linebender/resvg 4.2k #1234 Fix integer overflows in feTurbulence
prometheus-community/postgres_exporter 3.7k #1443 stat_wal_receiver: export metrics when replicating without a slot
pdeljanov/Symphonia 3.5k #608 isomp4: Fix integer overflow in stts sample lookups.
pdeljanov/Symphonia 3.5k #609 isomp4: Return an error instead of underflowing in MoofSegment sample l…
pdeljanov/Symphonia 3.5k #610 isomp4: Return an error for a trun data offset outside the stream.
pdeljanov/Symphonia 3.5k #611 ogg: Set packet DTS equal to PTS.
vishvananda/netlink 3.3k #1237 netkit: add PeerAttrs getter
vishvananda/netlink 3.3k #1238 Close subscribe sockets when the receive goroutine exits
tafia/calamine 2.5k #800 xlsb: return an error on unchecked indexes in malformed files
apache/iceberg-rust 1.4k #3645 fix(transform): avoid overflow in adjust_boundary at type extremes
prometheus/statsd_exporter 990 #769 Add a gauge for the number of active metric vectors
pion/stun 866 #301 Restrict stun-client to IPv4
JFryy/qq 740 #108 feat: add --indent flag to control output indentation
algesten/str0m 656 #1129 Remove native OpenSSL DTLS; use dimpl for the openssl backend
asticode/go-astits 618 #79 Sync to the first packet when the stream doesn't start with a sync byte
flock-php/flock 570 #116 fix(cli): respect ZDOTDIR when adding Flock to the zsh PATH
ClickHouse/clickhouse-rs 569 #507 feat: add Insert::set_buffer_size()
ClickHouse/clickhouse-rs 569 #508 feat: support different column names for serialization and deserializat…
ClickHouse/clickhouse-rs 569 #511 feat(serde): add ::vec helpers for temporal types
pion/rtp 480 #372 Drop H264 FU-A fragments without a start
tikv/client-go 364 #2171 metrics: give each backoff config its own histogram label
gopacket/gopacket 320 #177 packet: copy zero copy data on the Packets channel path
webrtc-rs/rtc 170 #316 fix(turn): track client permissions per peer IP, not per IP and port
pion/interceptor 149 #470 Assign RTX sequence numbers at send time
pyhss/pyhss 115 #338 diameter: answer with an error Result-Code when a handler raises
free5gc/smf 26 #244 fix: release SMContext and reject when UDM token fetch fails

Selected fixes

Hand-picked from the list above: fixes that stopped data loss, crashes, or security problems in software a lot of people run.

Project Fix
webrtc-rs #954 Every STUN Binding request went out with the all-zero transaction ID; now random per RFC 8489
mediacommon #377 MP4 export wrapped the duration of tracks longer than 2^32 ticks (about 13 h), so players stopped early
hyperium/h2 #1002 HTTP/2 streams stalled after the receive window was lowered: released credit was never sent as a WINDOW_UPDATE
gitea #38693 LFS: a failed upload no longer deletes a concurrent upload's metadata
velero #10212 Zip Slip check accepted a sibling directory during archive extraction
rclone #9947 --copy-links no longer follows symlink loops
seaweedfs #11393 Volume server returns an error instead of panicking on a corrupt needle
sarama #3752 Client only deregisters the broker registered under that ID
woodpecker #7192 Race on concurrent pipeline config persist

Projects

Repository What it is
go-diam Typed, code-generated Diameter codecs for Go. proto3 in, plain structs with Marshal/Unmarshal/Validate out, no runtime dictionary. v0.2.1: base protocol (RFC 6733) and ten 3GPP applications (S6a/S6d, S13, Cx/Dx, Sh/Dh, SWx, S6t, S6m/S6n, S6c, SLh, Zh), fuzzed and checked byte-for-byte against go-diameter; S6a, Cx and SWx answers captured from the Open5GS HSS are replayed in the tests
diam-gw Diameter gateway: client library and code generator, with CI and a performance budget
go-eir Equipment Identity Register (EIR) in Go, hexagonal architecture
gohss HSS with S6a, Cx and Sh interfaces
telco Shared telecom utilities: 3GPP types, encoders, and test helpers
go-project-dump Dump a Go project into a single reviewable document
go-auth-middleware JWT authentication and role-based authorization middleware for Gin

The 5GC + EPC stack these grew out of (UDM, AUSF, UDR, HSS, EIR) is private; the free5gc, go-diameter and PyHSS fixes above came from it.

Elsewhere

  • Lead inventor on US 12,621,367 B2: session persistence for stateful microservices, a proxy/worker split with a session-ID affinity table, applied to a 5G SMF.
  • LinkedIn

Focus

  • Real-time media: WebRTC and ICE, RTSP, HLS, RTP/RTCP, and the MP4 and codec parsers that have to survive bad input
  • Go and Rust services on Kubernetes, delivered with Helm and end-to-end tests
  • 5G core and EPC interworking: SBI over HTTP/2 and Diameter

Go · Rust · WebRTC · RTP · RTSP · HLS · Kubernetes · gRPC · HTTP/2 · Diameter · PostgreSQL · ClickHouse

The contribution block is regenerated nightly by scripts/build_stats.py; own and private repositories are excluded, so every row is a public upstream pull request.

Pinned Loading

  1. diam-gw diam-gw Public

    Diameter gateway for Go: client library and code generator, with CI and a performance budget

    Go

  2. seaweedfs/seaweedfs seaweedfs/seaweedfs Public

    SeaweedFS is a distributed storage system for object storage (S3), file systems, Iceberg table buckets, and Lance vector buckets, designed to handle billions of files with O(1) disk access and effo…

    Go 36.1k 3.1k