imagetops passes a NULL image to cfImageClose
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 78/100
Direzione di ricerca
Inizia in ppd/imagetops-pstops.c intorno alla riga 1181, dove ppdFilterImageToPS() esegue la pulizia dopo il fallimento dell’apertura dell’immagine, e ispeziona cupsfilters/image.c intorno alla riga 75 per cfImageClose(). Riproduci il problema con il PGM fornito, il comando imagetops e una build con ASan/UBSan; il lavoro è completato quando la pulizia di NULL non dereferenzia più memoria e imagetops restituisce un normale errore del filtro.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
When image opening fails, ppdFilterImageToPS() calls cfImageClose(img) while img == NULL. cfImageClose() immediately dereferences img->cachefile.
Reproduction
Build current upstream with ASan/UBSan. A compact binary PGM is sufficient to reach the image-open failure path in the tested build:
printf 'P5\n1 1\n255\n\001' > document.ppm
ASAN_OPTIONS=detect_leaks=0 PPD=candidate.ppd CONTENT_TYPE=image/x-portable-anymap
imagetops 1 fuzzer fuzzer 1 'Resolution=300dpi PageSize=Letter' document.ppm >/dev/null
Result
Reproduced through the real imagetops CLI with an ASan/UBSan build from libppd HEAD 522af8dd135f4dde66b1aac8b9d067808bbe122d and libcupsfilters HEAD d63939da08eaef622a2443b7c9638d22c4d9831d on 2026-07-19. ASan reports a SEGV in cupsfilters/image.c:75 (cfImageClose), called by ppd/imagetops-pstops.c:1181.
Cause and expected behavior
This is an error-cleanup bug: the image-open operation has already returned NULL, but its cleanup path dereferences that NULL value. Do not call cfImageClose for NULL, or make it tolerate NULL, and return a normal filter error.
- Lingua principale
- C
- Stelle
- 5
- Fork
- 30
- 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 OpenPrinting/libppd
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
OpenPrinting/libppd#86 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
OpenPrinting/libppd#82 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
OpenPrinting/libppd#81 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
OpenPrinting/libppd#90 · 1 commento ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 72/100
OpenPrinting/libppd#85 ·
Tutte le issue di OpenPrinting/libppd
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
-
enhancement
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 92/100
-
enhancement
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 94/100
-
feature request
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100