Mon Oct 15 15:29:11 2012 UTC ()
xlock -mode dclock would segfault on OSes with sizeof(time_t)>sizeof(long);
this includes NetBSD-6 on 32bit systems.

As a result, xlock -mode random (the default) would eventually unlock
the screen, without the user being aware of this (as she/he's can be
presumed to have left the monitor).

The reason was that some variables in dclock.c were declared long, but
contain essentially time_t values. In on case, a pointer to such a
variable was casted to (struct time_t *) and passed to localtime(),
and the resulting pointer is not checked for error before being used.

The variables have been changed to time_t and the typecast has been
removed.


(is)
diff -r1.99 -r1.100 pkgsrc/x11/xlockmore/Makefile
diff -r1.48 -r1.49 pkgsrc/x11/xlockmore/distinfo
diff -r1.15 -r1.16 pkgsrc/x11/xlockmore-lite/Makefile
diff -r0 -r1.1 pkgsrc/x11/xlockmore/patches/patch-modes_dclock.c

cvs diff -r1.99 -r1.100 pkgsrc/x11/xlockmore/Makefile (expand / switch to unified diff)

--- pkgsrc/x11/xlockmore/Makefile 2012/10/08 23:02:40 1.99
+++ pkgsrc/x11/xlockmore/Makefile 2012/10/15 15:29:09 1.100
@@ -1,17 +1,17 @@ @@ -1,17 +1,17 @@
1# $NetBSD: Makefile,v 1.99 2012/10/08 23:02:40 adam Exp $ 1# $NetBSD: Makefile,v 1.100 2012/10/15 15:29:09 is Exp $
2 2
3.include "Makefile.common" 3.include "Makefile.common"
4PKGREVISION= 5 4PKGREVISION= 6
5 5
6COMMENT= Like the XLock session-locker/screensaver, but with more 6COMMENT= Like the XLock session-locker/screensaver, but with more
7 7
8CONFIGURE_ARGS+= --with-opengl 8CONFIGURE_ARGS+= --with-opengl
9CONFIGURE_ARGS+= --with-mesa 9CONFIGURE_ARGS+= --with-mesa
10CONFIGURE_ARGS+= --without-ttf 10CONFIGURE_ARGS+= --without-ttf
11XPM_ENV= no_xpm= xpm_includes=${BUILDLINK_PREFIX.libXpm}/include xpm_libraries=${BUILDLINK_PREFIX.libXpm}/lib 11XPM_ENV= no_xpm= xpm_includes=${BUILDLINK_PREFIX.libXpm}/include xpm_libraries=${BUILDLINK_PREFIX.libXpm}/lib
12CONFIGURE_ENV+= ac_cv_path_xpm=${XPM_ENV:Q} 12CONFIGURE_ENV+= ac_cv_path_xpm=${XPM_ENV:Q}
13OPENGL_ENV= no_opengl= ac_opengl_includes=${BUILDLINK_PREFIX.MesaLib}/include ac_opengl_libraries=${BUILDLINK_PREFIX.MesaLib}/lib 13OPENGL_ENV= no_opengl= ac_opengl_includes=${BUILDLINK_PREFIX.MesaLib}/include ac_opengl_libraries=${BUILDLINK_PREFIX.MesaLib}/lib
14CONFIGURE_ENV+= ac_cv_path_opengl=${OPENGL_ENV:Q} 14CONFIGURE_ENV+= ac_cv_path_opengl=${OPENGL_ENV:Q}
15MESA_ENV= no_mesa= ac_mesa_includes=${BUILDLINK_PREFIX.MesaLib}/include ac_mesa_libraries=${BUILDLINK_PREFIX.MesaLib}/lib 15MESA_ENV= no_mesa= ac_mesa_includes=${BUILDLINK_PREFIX.MesaLib}/include ac_mesa_libraries=${BUILDLINK_PREFIX.MesaLib}/lib
16CONFIGURE_ENV+= ac_cv_path_mesa=${MESA_ENV:Q} 16CONFIGURE_ENV+= ac_cv_path_mesa=${MESA_ENV:Q}
17#BUILDLINK_TRANSFORM+= l:MesaGL:GL 17#BUILDLINK_TRANSFORM+= l:MesaGL:GL

cvs diff -r1.48 -r1.49 pkgsrc/x11/xlockmore/distinfo (expand / switch to unified diff)

--- pkgsrc/x11/xlockmore/distinfo 2012/02/13 11:46:13 1.48
+++ pkgsrc/x11/xlockmore/distinfo 2012/10/15 15:29:09 1.49
@@ -1,10 +1,11 @@ @@ -1,10 +1,11 @@
1$NetBSD: distinfo,v 1.48 2012/02/13 11:46:13 drochner Exp $ 1$NetBSD: distinfo,v 1.49 2012/10/15 15:29:09 is Exp $
2 2
3SHA1 (xlockmore-5.38.tar.bz2) = 5a0fd27209dfc0966a1ec691f9ea4416587082bf 3SHA1 (xlockmore-5.38.tar.bz2) = 5a0fd27209dfc0966a1ec691f9ea4416587082bf
4RMD160 (xlockmore-5.38.tar.bz2) = 227a2c13c8cf1ddb027138dc520874accf5c0f72 4RMD160 (xlockmore-5.38.tar.bz2) = 227a2c13c8cf1ddb027138dc520874accf5c0f72
5Size (xlockmore-5.38.tar.bz2) = 1970750 bytes 5Size (xlockmore-5.38.tar.bz2) = 1970750 bytes
6SHA1 (patch-aa) = 548646fe62b2d201328ca25a067e19998d58eb18 6SHA1 (patch-aa) = 548646fe62b2d201328ca25a067e19998d58eb18
7SHA1 (patch-ab) = 48bd5ea9389f646df5ffe290f3230b028916f0d1 7SHA1 (patch-ab) = 48bd5ea9389f646df5ffe290f3230b028916f0d1
8SHA1 (patch-ac) = e05f4956c0b4bd9b90c86e5a1174aab5e474115f 8SHA1 (patch-ac) = e05f4956c0b4bd9b90c86e5a1174aab5e474115f
9SHA1 (patch-ad) = a76c7d9f17dec5cf2a3de6d0c3343c80cf53d314 9SHA1 (patch-ad) = a76c7d9f17dec5cf2a3de6d0c3343c80cf53d314
10SHA1 (patch-ae) = b78d7d148c9a62dbdf72e05aeec8d22d10ab9cce 10SHA1 (patch-ae) = b78d7d148c9a62dbdf72e05aeec8d22d10ab9cce
 11SHA1 (patch-modes_dclock.c) = b5863dab4153cbe19b54c2838c85df1a84f09a14

cvs diff -r1.15 -r1.16 pkgsrc/x11/xlockmore-lite/Makefile (expand / switch to unified diff)

--- pkgsrc/x11/xlockmore-lite/Makefile 2012/06/15 23:06:08 1.15
+++ pkgsrc/x11/xlockmore-lite/Makefile 2012/10/15 15:29:10 1.16
@@ -1,19 +1,19 @@ @@ -1,19 +1,19 @@
1# $NetBSD: Makefile,v 1.15 2012/06/15 23:06:08 dholland Exp $ 1# $NetBSD: Makefile,v 1.16 2012/10/15 15:29:10 is Exp $
2 2
3.include "../../x11/xlockmore/Makefile.common" 3.include "../../x11/xlockmore/Makefile.common"
4 4
5PKGNAME= ${DISTNAME:S/-/-lite-/} 5PKGNAME= ${DISTNAME:S/-/-lite-/}
6PKGREVISION= 1 6PKGREVISION= 2
7COMMENT= "lite" version of xlockmore 7COMMENT= "lite" version of xlockmore
8 8
9CONFIGURE_ARGS+= --without-xpm 9CONFIGURE_ARGS+= --without-xpm
10CONFIGURE_ARGS+= --without-gltt 10CONFIGURE_ARGS+= --without-gltt
11CONFIGURE_ARGS+= --without-ttf 11CONFIGURE_ARGS+= --without-ttf
12CONFIGURE_ARGS+= --without-freetype 12CONFIGURE_ARGS+= --without-freetype
13CONFIGURE_ARGS+= --without-opengl 13CONFIGURE_ARGS+= --without-opengl
14CONFIGURE_ARGS+= --without-magick 14CONFIGURE_ARGS+= --without-magick
15CONFIGURE_ARGS+= --without-mesa 15CONFIGURE_ARGS+= --without-mesa
16CONFIGURE_ARGS+= --without-rplay 16CONFIGURE_ARGS+= --without-rplay
17CONFIGURE_ARGS+= --without-esound 17CONFIGURE_ARGS+= --without-esound
18CONFIGURE_ARGS+= --without-gtk2 18CONFIGURE_ARGS+= --without-gtk2
19CONFIGURE_ARGS+= --without-gtk 19CONFIGURE_ARGS+= --without-gtk

File Added: pkgsrc/x11/xlockmore/patches/Attic/patch-modes_dclock.c
$NetBSD: patch-modes_dclock.c,v 1.1 2012/10/15 15:29:10 is Exp $

--- modes/dclock.c.orig	2012-01-23 13:19:21.000000000 +0000
+++ modes/dclock.c
@@ -420,7 +420,7 @@ convert(double x, char *string)
 }
 
 static void
-dayhrminsec(long timeCount, int tzoffset, char *string)
+dayhrminsec(time_t timeCount, int tzoffset, char *string)
 {
 	int days, hours, minutes, secs;
 	int bufsize, i;
@@ -675,7 +675,7 @@ drawDclock(ModeInfo * mi)
 				"%a %b %d %Y", localtime(&(dp->timeold)));
 		}
 	  } else {
-		long timeNow, timeLocal;
+		time_t timeNow, timeLocal;
 		timeNow = seconds();
 		timeLocal = timeNow + dp->tzoffset;
 
@@ -950,7 +950,7 @@ init_dclock(ModeInfo * mi)
 {
 	Display *display = MI_DISPLAY(mi);
 	dclockstruct *dp;
-	long timeNow, timeLocal;
+	time_t timeNow, timeLocal;
 	int i, j;
 
 	if (dclocks == NULL) {
@@ -1252,7 +1252,7 @@ defined(MODE_dclock_mayan)
 			dayhrminsec(MAYAN_TIME_START - timeLocal, dp->tzoffset, dp->strnew[1]);
 			dp->strpta[1] = dp->strnew[1];
 		} else {
-			struct tm *t = localtime((const time_t *) &timeLocal);
+			struct tm *t = localtime(&timeLocal);
 
 			if (dp->time24)
 			  (void) strftime(dp->strnew[0], STRSIZE, "%H:%M:%S", t);