Hello community,

here is the log from the commit of package screen for openSUSE:Factory checked 
in at 2016-08-25 09:49:16
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/screen (Old)
 and      /work/SRC/openSUSE:Factory/.screen.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "screen"

Changes:
--------
--- /work/SRC/openSUSE:Factory/screen/screen.changes    2015-09-19 
06:52:06.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.screen.new/screen.changes       2016-08-25 
09:49:18.000000000 +0200
@@ -1,0 +2,14 @@
+Wed Aug 17 14:02:33 UTC 2016 - [email protected]
+
+- Remove %postun - it tried to delete "screen.info.gz" file
+  second time.
+
+-------------------------------------------------------------------
+Thu Aug 11 17:32:44 UTC 2016 - [email protected]
+
+- GNU screen 4.4.0:
+ * Support up to 24 function keys
+ * 'logfile' command, starts logging into new file upon changing
+ * Fix runtime issues
+
+-------------------------------------------------------------------

Old:
----
  screen-4.3.1.tar.gz
  screen-4.3.1.tar.gz.sig

New:
----
  screen-4.4.0.tar.gz
  screen-4.4.0.tar.gz.sig

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ screen.spec ++++++
--- /var/tmp/diff_new_pack.4Zbifr/_old  2016-08-25 09:49:19.000000000 +0200
+++ /var/tmp/diff_new_pack.4Zbifr/_new  2016-08-25 09:49:19.000000000 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package screen
 #
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -39,7 +39,7 @@
 BuildRequires:  pam-devel
 PreReq:         %install_info_prereq
 PreReq:         coreutils
-Version:        4.3.1
+Version:        4.4.0
 Release:        0
 Summary:        A program to allow multiple screens on a VT100/ANSI Terminal
 License:        GPL-3.0+
@@ -127,7 +127,4 @@
 test -d %rundir/screens || mkdir -m 755 %rundir/screens
 test -d %rundir/uscreens || mkdir -m 1777 %rundir/uscreens
 
-%postun
-%install_info_delete --info-dir=%{_infodir} %{_infodir}/%{name}.info.gz
-
 %changelog

++++++ screen-4.3.1.tar.gz -> screen-4.4.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/screen-4.3.1/ChangeLog new/screen-4.4.0/ChangeLog
--- old/screen-4.3.1/ChangeLog  2015-06-28 23:41:01.000000000 +0200
+++ new/screen-4.4.0/ChangeLog  2016-06-19 22:20:33.000000000 +0200
@@ -1,3 +1,8 @@
+Version 4.4.0 (19/06/2016):
+  * Support up to 24 function keys
+  * Fix runtime issues
+  * 'logfile' command, starts logging into new file upon changing
+
 Version 4.3.1 (28/06/2015):
   * Fix resize bug
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/screen-4.3.1/INSTALL new/screen-4.4.0/INSTALL
--- old/screen-4.3.1/INSTALL    2015-06-28 23:39:42.000000000 +0200
+++ new/screen-4.4.0/INSTALL    2016-06-19 21:41:03.000000000 +0200
@@ -1,4 +1,4 @@
-Installation of screen 4.3.1
+Installation of GNU screen.
 
 
 0.) This instruction is quite lengthy
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/screen-4.3.1/Makefile.in new/screen-4.4.0/Makefile.in
--- old/screen-4.3.1/Makefile.in        2015-06-28 23:22:55.000000000 +0200
+++ new/screen-4.4.0/Makefile.in        2016-06-19 21:41:03.000000000 +0200
@@ -352,5 +352,5 @@
  braille.h
 list_generic.o: list_generic.h list_generic.c layer.h screen.h osdef.h
 list_display.o: list_generic.h list_display.c layer.h screen.h osdef.h
-list_window.o: list_generic.h list_window.c window.h layer.h screen.h osdef.h
+list_window.o: list_generic.h list_window.c window.h layer.h screen.h osdef.h 
comm.h
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/screen-4.3.1/README new/screen-4.4.0/README
--- old/screen-4.3.1/README     2015-06-28 23:39:55.000000000 +0200
+++ new/screen-4.4.0/README     2016-06-19 21:41:03.000000000 +0200
@@ -5,7 +5,7 @@
 
 
 
-Short introduction to screen (Version 4.3.1)
+Short introduction to GNU screen.
 
 Send bugreports, fixes, enhancements, t-shirts, money, beer & pizza to 
                           [email protected]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/screen-4.3.1/ansi.c new/screen-4.4.0/ansi.c
--- old/screen-4.3.1/ansi.c     2015-06-28 23:22:55.000000000 +0200
+++ new/screen-4.4.0/ansi.c     2016-06-19 21:41:03.000000000 +0200
@@ -2502,13 +2502,13 @@
     return;
   if (n > 0)
     {
+      if (ye - ys + 1 < n)
+       n = ye - ys + 1;
       if (n > 256)
        {
          MScrollV(p, n - 256, ys, ye, bce);
          n = 256;
        }
-      if (ye - ys + 1 < n)
-       n = ye - ys + 1;
 #ifdef COPY_PASTE
       if (compacthist)
        {
@@ -2562,14 +2562,14 @@
     }
   else
     {
-      if (n < -256)
-       {
-         MScrollV(p, n + 256, ys, ye, bce);
-         n = -256;
-       }
       n = -n;
       if (ye - ys + 1 < n)
        n = ye - ys + 1;
+      if (n > 256)
+       {
+         MScrollV(p, - (n - 256), ys, ye, bce);
+         n = 256;
+       }
 
       ml = p->w_mlines + ye;
       /* Clear lines */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/screen-4.3.1/attacher.c new/screen-4.4.0/attacher.c
--- old/screen-4.3.1/attacher.c 2015-06-28 23:22:55.000000000 +0200
+++ new/screen-4.4.0/attacher.c 2016-06-19 21:41:03.000000000 +0200
@@ -364,8 +364,8 @@
     }
 #endif
   ASSERT(how == MSG_ATTACH || how == MSG_CONT);
-  strncpy(m.m.attach.envterm, attach_term, sizeof(m.m.attach.envterm) - 1);
-  m.m.attach.envterm[sizeof(m.m.attach.envterm) - 1] = 0;
+  strncpy(m.m.attach.envterm, attach_term, MAXTERMLEN);
+  m.m.attach.envterm[MAXTERMLEN] = 0;
   debug1("attach: sending %d bytes... ", (int)sizeof(m));
 
   strncpy(m.m.attach.auser, LoginName, sizeof(m.m.attach.auser) - 1); 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/screen-4.3.1/braille.c new/screen-4.4.0/braille.c
--- old/screen-4.3.1/braille.c  2015-06-28 23:22:55.000000000 +0200
+++ new/screen-4.4.0/braille.c  2016-06-19 21:41:03.000000000 +0200
@@ -704,7 +704,7 @@
          else if (ParseNum(act, &n))
            break;
        }
-      if (n < 0 && n > 3)
+      if (n < 0 || n > 3)
        {
           Msg(0, "Out of range; 0 <= bd_info >= 3 ");
          break;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/screen-4.3.1/canvas.c new/screen-4.4.0/canvas.c
--- old/screen-4.3.1/canvas.c   2015-06-28 23:22:55.000000000 +0200
+++ new/screen-4.4.0/canvas.c   2016-06-19 21:41:03.000000000 +0200
@@ -758,11 +758,12 @@
 void
 RemCanvas()
 {
-  int xs, xe, ys, ye;
+  int ye;
   struct canvas *cv;
 
   debug("RemCanvas\n");
   cv = D_forecv;
+  ye = cv->c_slback->c_ye;
   if (cv->c_slorient == SLICE_UNKN)
     return;
   while (cv->c_slprev)
@@ -777,10 +778,6 @@
       FreePerp(cv->c_slprev ? cv->c_slprev : cv->c_slnext);
       FreePerp(cv->c_slback);
     }
-  xs = cv->c_slback->c_xs;
-  xe = cv->c_slback->c_xe;
-  ys = cv->c_slback->c_ys;
-  ye = cv->c_slback->c_ye;
   /* free canvas */
   cv = D_forecv;
   D_forecv = cv->c_slprev;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/screen-4.3.1/display.c new/screen-4.4.0/display.c
--- old/screen-4.3.1/display.c  2015-06-28 23:22:55.000000000 +0200
+++ new/screen-4.4.0/display.c  2016-06-19 21:41:03.000000000 +0200
@@ -309,8 +309,8 @@
 
   strncpy(D_usertty, utty, sizeof(D_usertty) - 1);
   D_usertty[sizeof(D_usertty) - 1] = 0;
-  strncpy(D_termname, term, sizeof(D_termname) - 1);
-  D_termname[sizeof(D_termname) - 1] = 0;
+  strncpy(D_termname, term, MAXTERMLEN);
+  D_termname[MAXTERMLEN] = 0;
   D_user = *u;
   D_processinput = ProcessInput;
   D_mousetrack = defmousetrack;
@@ -3725,14 +3725,14 @@
   char *m;
   int pid;
   int slave = -1;
-  char termname[30];
+  char termname[MAXTERMLEN + 6];
 #ifndef TIOCSWINSZ
   char libuf[20], cobuf[20];
 #endif
   char **np;
 
   strcpy(termname, "TERM=");
-  strncpy(termname + 5, D_termname, sizeof(termname) - 6);
+  strncpy(termname + 5, D_termname, MAXTERMLEN - 6);
   termname[sizeof(termname) - 1] = 0;
   KillBlanker();
   D_blankerpid = -1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/screen-4.3.1/doc/screen.1 
new/screen-4.4.0/doc/screen.1
--- old/screen-4.3.1/doc/screen.1       2015-06-28 23:39:33.000000000 +0200
+++ new/screen-4.4.0/doc/screen.1       2016-06-19 21:41:03.000000000 +0200
@@ -5008,13 +5008,6 @@
 Pablo Averbuj ([email protected]).
 .fi
 
-
-.SH VERSION
-This is version 4.3.1. Its roots are a merge of a custom version
-2.3PR7 by Wayne Davison
-and several enhancements to Oliver Laumann's version 2.0. Note that all 
versions
-numbered 2.x are copyright by Oliver Laumann. 
-
 .SH AVAILABILITY
 The latest official release of 
 .I screen
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/screen-4.3.1/doc/screen.texinfo 
new/screen-4.4.0/doc/screen.texinfo
--- old/screen-4.3.1/doc/screen.texinfo 2015-06-28 23:39:19.000000000 +0200
+++ new/screen-4.4.0/doc/screen.texinfo 2016-06-19 22:21:26.000000000 +0200
@@ -7,7 +7,7 @@
 @finalout
 @setchapternewpage odd
 @c %**end of header
-@set version 4.3.1
+@set version 4.4.0
 
 @direntry
 * Screen: (screen).             Full-screen window manager.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/screen-4.3.1/os.h new/screen-4.4.0/os.h
--- old/screen-4.3.1/os.h       2015-06-28 23:22:56.000000000 +0200
+++ new/screen-4.4.0/os.h       2016-06-19 21:41:03.000000000 +0200
@@ -250,11 +250,9 @@
 #endif
 
 #if defined(UTMPOK) || defined(BUGGYGETLOGIN)
-# if defined(SVR4) && !defined(DGUX) && !defined(__hpux)
+# if defined(SVR4) && !defined(DGUX) && !defined(__hpux) && !defined(linux)
 #  include <utmpx.h>
-#  ifdef UTMPX_FILE /* GNU extension */
-#   define UTMPFILE    UTMPX_FILE
-#  endif
+#  define UTMPFILE     UTMPX_FILE
 #  define utmp         utmpx
 #  define getutent     getutxent
 #  define getutid      getutxid
@@ -262,6 +260,7 @@
 #  define pututline    pututxline
 #  define setutent     setutxent
 #  define endutent     endutxent
+#  define ut_time      ut_xtime
 # else /* SVR4 */
 #  include <utmp.h>
 # endif /* SVR4 */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/screen-4.3.1/patchlevel.h 
new/screen-4.4.0/patchlevel.h
--- old/screen-4.3.1/patchlevel.h       2015-06-28 23:41:56.000000000 +0200
+++ new/screen-4.4.0/patchlevel.h       2016-06-19 22:21:02.000000000 +0200
@@ -532,7 +532,7 @@
 
 #define ORIGIN "GNU"
 #define REV 4
-#define VERS 3
-#define PATCHLEVEL 1
-#define DATE "28-Jun-15"
+#define VERS 4
+#define PATCHLEVEL 0
+#define DATE "19-Jun-16"
 #define STATE ""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/screen-4.3.1/process.c new/screen-4.4.0/process.c
--- old/screen-4.3.1/process.c  2015-06-28 23:22:56.000000000 +0200
+++ new/screen-4.4.0/process.c  2016-06-19 21:41:03.000000000 +0200
@@ -2615,6 +2615,7 @@
     case RC_LOGFILE:
       if (*args)
        {
+         char buf[1024];
          if (args[1] && !(strcmp(*args, "flush")))
            {
              log_flush = atoi(args[1]);
@@ -2622,7 +2623,12 @@
                OutputMsg(0, "log flush timeout set to %ds\n", log_flush);
              break;
            }
-         if (ParseSaveStr(act, &screenlogfile) || !msgok)
+         if (ParseSaveStr(act, &screenlogfile))
+           break;
+         if (fore && fore->w_log)
+           if (DoStartLog(fore, buf, sizeof(buf)))
+             OutputMsg(0, "Error opening logfile \"%s\"", buf);
+         if (!msgok)
            break;
        }
       OutputMsg(0, "logfile is '%s'", screenlogfile);
@@ -2672,13 +2678,14 @@
       s = NULL;
       if (ParseSaveStr(act, &s))
        break;
-      if (strlen(s) >= MAXTERMLEN)
+      if (strlen(s) > MAXTERMLEN)
        {
          OutputMsg(0, "%s: term: argument too long ( < %d)", rc_name, 
MAXTERMLEN);
          free(s);
          break;
        }
-      strcpy(screenterm, s);
+      strncpy(screenterm, s, MAXTERMLEN);
+      screenterm[MAXTERMLEN] = '\0';
       free(s);
       debug1("screenterm set to %s\n", screenterm);
       MakeTermcap((display == 0));
@@ -5693,7 +5700,7 @@
 char *str;
 {
        int i;
-       debug1("ShowWindowsX: string [%s]", string);
+       debug1("ShowWindowsX: string [%s]", str);
        for (i = 0; i < maxwin ; i++) {
                if (!wtab[i])
                        continue;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/screen-4.3.1/screen.c new/screen-4.4.0/screen.c
--- old/screen-4.3.1/screen.c   2015-06-28 23:22:56.000000000 +0200
+++ new/screen-4.4.0/screen.c   2016-06-19 21:41:03.000000000 +0200
@@ -507,7 +507,8 @@
 #endif
   nwin = nwin_undef;
   nwin_options = nwin_undef;
-  strcpy(screenterm, "screen");
+  strncpy(screenterm, "screen", MAXTERMLEN);
+  screenterm[MAXTERMLEN] = '\0';
 #ifdef BUILTIN_TELNET
   af = AF_UNSPEC;
 #endif
@@ -689,9 +690,10 @@
                case 'T':
                  if (--ac == 0)
                    exit_with_usage(myname, "Specify terminal-type with -T", 
NULL);
-                 if (strlen(*++av) < 20)
-                   strcpy(screenterm, *av);
-                 else
+                 if (strlen(*++av) < MAXTERMLEN) {
+                   strncpy(screenterm, *av, MAXTERMLEN);
+                   screenterm[MAXTERMLEN] = '\0';
+                 } else
                    Panic(0, "-T: terminal name too long. (max. 20 char)");
                  nwin_options.term = screenterm;
                  break;
@@ -1034,7 +1036,7 @@
 
       if ((attach_term = getenv("TERM")) == 0 || *attach_term == 0)
        Panic(0, "Please set a terminal type.");
-      if (strlen(attach_term) > sizeof(D_termname) - 1)
+      if (strlen(attach_term) > MAXTERMLEN)
        Panic(0, "$TERM too long - sorry.");
       GetTTY(0, &attach_Mode);
 #ifdef DEBUGGGGGGGGGGGGGGG
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/screen-4.3.1/screen.h new/screen-4.4.0/screen.h
--- old/screen-4.3.1/screen.h   2015-06-28 23:22:56.000000000 +0200
+++ new/screen-4.4.0/screen.h   2016-06-19 21:41:03.000000000 +0200
@@ -184,8 +184,9 @@
  * 2:  screen version 4.1.0devel       (revisions 8b46d8a upto YYYYYYY)
  * 3:  screen version 4.2.0            (was incorrectly originally. Patched 
here)
  * 4:  screen version 4.2.1            (bumped once again due to changed 
terminal and login length)
+ * 5:  screen version 4.4.0            (fix screenterm size)
  */
-#define MSG_VERSION    4
+#define MSG_VERSION    5
 
 #define MSG_REVISION   (('m'<<24) | ('s'<<16) | ('g'<<8) | MSG_VERSION)
 struct msg
@@ -204,7 +205,7 @@
          int nargs;
          char line[MAXPATHLEN];
          char dir[MAXPATHLEN];
-         char screenterm[MAXTERMLEN];  /* is screen really "screen" ? */
+         char screenterm[MAXTERMLEN + 1];      /* is screen really "screen" ? 
*/
        }
       create;
       struct
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/screen-4.3.1/search.c new/screen-4.4.0/search.c
--- old/screen-4.3.1/search.c   2015-06-28 23:22:56.000000000 +0200
+++ new/screen-4.4.0/search.c   2016-06-19 21:41:03.000000000 +0200
@@ -132,23 +132,29 @@
     revto(x, y);
 }
 
+
+/*
+ * Search for a string that matches pattern.  The first character of the
+ * match must be on line y, between columns sx and ex (inclusive), but
+ * the rest of the match can extend beyond column ex and even onto the
+ * following line.  Returns the starting column of the first match found,
+ * or -1 if there's no match.
+ */
 static int
 matchword(pattern, y, sx, ex)
 char *pattern;
 int y, sx, ex;
 {
-  unsigned char *ip, *ipe, *cp, *pp;
-  struct mline *ml;
+  unsigned char *ip, *cp, *pp, *cpe;
+  int cy;
 
-  /* *sigh* to make WIN work */
   fore = ((struct markdata *)flayer->l_data)->md_window;
 
-  ml = WIN(y);
-  ip = ml->image + sx;
-  ipe = ml->image + flayer->l_width;
   for (;sx <= ex; sx++)
     {
-      cp = ip++;
+                       cy = y;
+                       cp = WIN(cy)->image + sx;
+                       cpe = WIN(cy)->image + flayer->l_width;
       pp = (unsigned char *)pattern;
       for (;;)
        {
@@ -159,8 +165,23 @@
          pp++;
          if (*pp == 0)
            return sx;
-         if (cp == ipe)
-           break;
+               if (cp == cpe) {
+               /*
+               * We have a partial match, but we've hit
+               * the end of this line.  Does it wrap onto
+               * the following line?  If not, we're done.
+               */
+               if (*cp == ' ' || cy >= fore->w_histheight + flayer->l_height - 
1)
+                       break;
+
+               /*
+               * This line does wrap, so look on the next
+               * line for the rest of our match.
+               */
+               cy++;
+               cp = WIN(cy)->image;
+               cpe = WIN(cy)->image + flayer->l_width;
+               }
        }
     }
   return -1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/screen-4.3.1/socket.c new/screen-4.4.0/socket.c
--- old/screen-4.3.1/socket.c   2015-06-28 23:22:56.000000000 +0200
+++ new/screen-4.4.0/socket.c   2016-06-19 21:41:03.000000000 +0200
@@ -51,6 +51,13 @@
 # define dirent direct
 #endif
 
+#ifndef CMSG_LEN
+#define CMSG_LEN(length) ((_CMSG_DATA_ALIGN(sizeof(struct cmsghdr))) + 
(length))
+#endif
+#ifndef CMSG_SPACE
+#define CMSG_SPACE(length) ((_CMSG_DATA_ALIGN(sizeof(struct cmsghdr))) + 
(_CMSG_DATA_ALIGN(length)))
+#endif
+
 #include "extern.h"
 #include "list_generic.h"
 
@@ -695,8 +702,8 @@
       return;
     }
   if (nwin->term != nwin_undef.term)
-    strncpy(m.m.create.screenterm, nwin->term, 19);
-  m.m.create.screenterm[19] = '\0';
+    strncpy(m.m.create.screenterm, nwin->term, MAXTERMLEN);
+  m.m.create.screenterm[MAXTERMLEN] = '\0';
   m.protocol_revision = MSG_REVISION;
   debug1("SendCreateMsg writing '%s'\n", m.m.create.line);
   if (write(s, (char *) &m, sizeof m) != sizeof m)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/screen-4.3.1/term.c new/screen-4.4.0/term.c
--- old/screen-4.3.1/term.c     2015-06-28 23:22:56.000000000 +0200
+++ new/screen-4.4.0/term.c     2016-06-19 21:41:03.000000000 +0200
@@ -205,6 +205,10 @@
   { "F8", T_STR  },
   { "F9", T_STR  },
   { "FA", T_STR  },
+  { "FB", T_STR  },
+  { "FC", T_STR  },
+  { "FD", T_STR  },
+  { "FE", T_STR  },
 
   { "kb", T_STR  },
   { "K1", T_STR  },
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/screen-4.3.1/termcap.c new/screen-4.4.0/termcap.c
--- old/screen-4.3.1/termcap.c  2015-06-28 23:22:56.000000000 +0200
+++ new/screen-4.4.0/termcap.c  2016-06-19 21:41:03.000000000 +0200
@@ -72,7 +72,7 @@
 static int Termcaplen;
 static int tcLineLen;
 char Term[MAXSTR+5];           /* +5: "TERM=" */
-char screenterm[20];           /* new $TERM, usually "screen" */
+char screenterm[MAXTERMLEN + 1];       /* new $TERM, usually "screen" */
 
 char *extra_incap, *extra_outcap;
 
@@ -389,11 +389,11 @@
     {
       /* init with default string first */
       s = "l+m+k+j+u+t+v+w+q-x|n+o~s_p\"r#`+a:f'g#~o.v-^+<,>h#I#0#y<z>";
-      for (i = strlen(s) & ~1; i >= 0; i -= 2)
+      for (i = (strlen(s) - 2) & ~1; i >= 0; i -= 2)
        D_c0_tab[(int)(unsigned char)s[i]] = s[i + 1];
     }
   if (D_CC0)
-    for (i = strlen(D_CC0) & ~1; i >= 0; i -= 2)
+    for (i = (strlen(D_CC0) - 2) & ~1; i >= 0; i -= 2)
       D_c0_tab[(int)(unsigned char)D_CC0[i]] = D_CC0[i + 1];
   debug1("ISO2022 = %d\n", D_CG0);
 #endif /* FONT */
@@ -883,7 +883,8 @@
   if (*screenterm == '\0' || strlen(screenterm) > MAXSTR - 3)
     {
       debug("MakeTermcap sets screenterm=screen\n");
-      strcpy(screenterm, "screen");
+      strncpy(screenterm, "screen", MAXTERMLEN);
+      screenterm[MAXTERMLEN] = '\0';
     }
 #if 0
   found = 1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/screen-4.3.1/tty.sh new/screen-4.4.0/tty.sh
--- old/screen-4.3.1/tty.sh     2015-06-28 23:22:56.000000000 +0200
+++ new/screen-4.4.0/tty.sh     2016-06-19 21:41:03.000000000 +0200
@@ -74,6 +74,7 @@
 #ifdef __hpux
 # include <sys/modem.h>
 #endif
+#include <limits.h>
 
 #ifdef ISC
 # include <sys/tty.h>
@@ -1506,20 +1507,21 @@
 char *tty;
 {
   struct stat st;
-  char * real;
+  char realbuf[PATH_MAX];
+  const char *real;
   int rc;
 
-  real = realpath(tty, NULL);
+  real = realpath(tty, realbuf);
   if (!real)
     return -1;
+  realbuf[sizeof(realbuf)-1]='\0';
 
   if (lstat(real, &st) || !S_ISCHR(st.st_mode) ||
-    (st.st_nlink > 1 && strncmp(real, "/dev/", 5)))
+    (st.st_nlink > 1 && strncmp(real, "/dev", 4)))
     rc = -1;
   else
     rc = 0;
 
-  free(real);
   return rc;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/screen-4.3.1/utmp.c new/screen-4.4.0/utmp.c
--- old/screen-4.3.1/utmp.c     2015-06-28 23:37:40.000000000 +0200
+++ new/screen-4.4.0/utmp.c     2016-06-19 21:41:03.000000000 +0200
@@ -631,7 +631,7 @@
   /* must use temp variable because of NetBSD/sparc64, where
    * ut_xtime is long(64) but time_t is int(32) */
   (void)time(&now);
-  u->ut_tv.tv_sec = now;
+  u->ut_time = now;
 }
 
 static slot_t
@@ -743,7 +743,7 @@
   strncpy(u->ut_line, line, sizeof(u->ut_line));
   strncpy(u->ut_name, user, sizeof(u->ut_name));
   (void)time(&now);
-  u->ut_tv.tv_sec = now;
+  u->ut_time = now;
 }
 
 static slot_t
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/screen-4.3.1/window.c new/screen-4.4.0/window.c
--- old/screen-4.3.1/window.c   2015-06-28 23:22:56.000000000 +0200
+++ new/screen-4.4.0/window.c   2016-06-19 21:41:03.000000000 +0200
@@ -1438,7 +1438,7 @@
       NewEnv[4] = shellbuf;
       debug1("ForkWindow: NewEnv[4] = '%s'\n", shellbuf);
       if (win->w_term && *win->w_term && strcmp(screenterm, win->w_term) &&
-         (strlen(win->w_term) < 20))
+         (strlen(win->w_term) < MAXTERMLEN))
        {
          char *s1, *s2, tl;
 



Reply via email to