Package: nvi
Version: 1.81.6-4
Hi,
Because of the 08lfs.dpatch, when errno is EOVERFLOW from stat, the
"goto err" bypasses a future initialisation of EXF *ep. Segfault happens
when structures are freed. A patch that initialises the pointer to NULL
and conditions out the frees on it in error handling follows.
Greetings,
Michael.
diff -urN orig/nvi-1.81.6/common/exf.c fixed/nvi-1.81.6/common/exf.c
--- orig/nvi-1.81.6/common/exf.c 2009-10-15 21:52:44.000000000 -0400
+++ fixed/nvi-1.81.6/common/exf.c 2009-10-15 21:43:17.000000000 -0400
@@ -125,7 +125,7 @@
int
file_init(SCR *sp, FREF *frp, char *rcv_name, int flags)
{
- EXF *ep;
+ EXF *ep = 0;
struct stat sb;
size_t psize;
int fd, exists, open_err, readonly, stolen;
@@ -495,18 +495,21 @@
frp->tname = NULL;
}
-oerr: if (F_ISSET(ep, F_RCV_ON))
- (void)unlink(ep->rcv_path);
- if (ep->rcv_path != NULL) {
- free(ep->rcv_path);
- ep->rcv_path = NULL;
- }
- if (ep->db != NULL) {
- (void)ep->db->close(ep->db, DB_NOSYNC);
- ep->db = NULL;
+oerr:
+ if (ep) {
+ if (F_ISSET(ep, F_RCV_ON))
+ (void)unlink(ep->rcv_path);
+ if (ep->rcv_path != NULL) {
+ free(ep->rcv_path);
+ ep->rcv_path = NULL;
+ }
+ if (ep->db != NULL) {
+ (void)ep->db->close(ep->db, DB_NOSYNC);
+ ep->db = NULL;
+ }
+ free(ep);
}
- free(ep);
-
+
return (open_err && !LF_ISSET(FS_OPENERR) ?
file_init(sp, frp, rcv_name, flags | FS_OPENERR) : 1);
}
--
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org