From 94c0cca671a72fcbfab90b3aa1fbb6ee2315872c Mon Sep 17 00:00:00 2001 From: Lukas Mai Date: Sun, 21 Sep 2025 08:40:27 +0200 Subject: [PATCH] PerlIO::via: remove redundant NULL check The `if (gv)` check is pointless because `GvIOp(gv)` already dereferences `gv`, so if `gv` could be NULL, we'd already have undefined behavior (most likely a segfault) before reaching the `if`. Make the code's implicit assumptions explicit by adding `assert(gv)` before dereferencing. Fixes Coverity CID 584859. --- ext/PerlIO-via/via.pm | 2 +- ext/PerlIO-via/via.xs | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/ext/PerlIO-via/via.pm b/ext/PerlIO-via/via.pm index 695e93611db4..25d386932339 100644 --- a/ext/PerlIO-via/via.pm +++ b/ext/PerlIO-via/via.pm @@ -1,5 +1,5 @@ package PerlIO::via; -our $VERSION = '0.20'; +our $VERSION = '0.21'; require XSLoader; XSLoader::load(); 1; diff --git a/ext/PerlIO-via/via.xs b/ext/PerlIO-via/via.xs index de04b8c24c54..65819159f70f 100644 --- a/ext/PerlIO-via/via.xs +++ b/ext/PerlIO-via/via.xs @@ -96,13 +96,12 @@ PerlIOVia_method(pTHX_ PerlIO * f, const char *method, CV ** save, int flags, if (!package) return Nullsv; /* can this ever happen? */ gv = newGVgen(package); + assert(gv); GvIOp(gv) = newIO(); s->fh = newRV((SV *) gv); s->io = GvIOp(gv); - if (gv) { - /* shamelessly stolen from IO::File's new_tmpfile() */ - (void) hv_delete(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv), G_DISCARD); - } + /* shamelessly stolen from IO::File's new_tmpfile() */ + (void) hv_delete(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv), G_DISCARD); } IoIFP(s->io) = PerlIONext(f); IoOFP(s->io) = PerlIONext(f);