Memory leak in Read() on failed reads
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 72/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- cpp, javascript
- Ambito
- backend, networking
Direzione di ricerca
Individua l’implementazione nativa di srt.read() e traccia malloc, il percorso di errore di srt_recvmsg() e la gestione del valore restituito. Usa la riproduzione Node.js fornita per confermare la perdita quando le letture falliscono ripetutamente; il lavoro è completo quando le letture fallite non trattengono più il buffer allocato e la riproduzione non mostra più un aumento costante della memoria.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Hello, we have found a possible memory leak in srt.read()
uint8_t *buffer = (uint8_t *)malloc(bufferSize);
memset(buffer, 0, bufferSize);
int nb = srt_recvmsg(socketValue, (char *)buffer, (int)bufferSize);
if (nb == SRT_ERROR) {
// throws + returns — no free(buffer)
return Napi::Number::New(env, SRT_ERROR);
}
Napi::Value nbuff = Napi::Buffer<uint8_t>::Copy(env, buffer, nb);
free(buffer); // only on success
It does a malloc up front, and if srt_recvmsg fails it throws and returns without freeing it. free only happens on the success path.
ThrowAsJavaScriptException() doesn't free native malloc. Pointer is lost on return. if you drain until empty, that last "no data available" read leaks chunkSize bytes every time.
Repro:
const { SRT } = require('@eyevinn/srt');
(async () => {
const srt = new SRT();
const port = 19991;
const lis = srt.createSocket(false);
srt.bind(lis, '127.0.0.1', port);
srt.listen(lis, 1);
const caller = srt.createSocket(false);
srt.connect(caller, '127.0.0.1', port);
const fd = srt.accept(lis);
srt.setSockOpt(fd, SRT.SRTO_RCVSYN, false);
await new Promise(r => setTimeout(r, 500));
const before = process.memoryUsage().rss;
for (let i = 0; i < 20000; i++) {
try { srt.read(fd, 1316); } catch {}
}
global.gc && global.gc();
await new Promise(r => setTimeout(r, 200));
const after = process.memoryUsage().rss;
console.log('delta:', after - before);
// delta: 26722304
})();
- Lingua principale
- JavaScript
- Stelle
- 99
- Fork
- 35
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di Eyevinn/node-srt
-
Security: bundled libSRT v1.5.5 is vulnerable to CVE-2026-55869 and CVE-2026-55868 (fixed upstream in v1.5.6)Forse già presa @birme l’ha presa 76 giorni fa. Apertabuild-issue ready-for-maintainer
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
-
Accept() closes the listener socket on success — a listener can only accept one connectionForse già presa @cdgraff l’ha presa 106 giorni fa. Apertabug ready-for-maintainer
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 75/100
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 66/100
-
question ready-for-maintainer
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
-
bug ready-for-maintainer
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
Tutte le issue di Eyevinn/node-srt
Issue simili
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
glossyio/traffic-monitor#264 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 72/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
micromatch/picomatch#243 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
getComputedStyle().display is "" for span, a, b, label and other inline elements instead of "inline"Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
capricorn86/happy-dom#2556 ·
I maintainer di solito rispondono entro 1 giorno