From 068b0a374f46b5f4376303d04800e20d821fa25d Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Fri, 25 Sep 2009 12:35:36 +0000 Subject: [PATCH] - fix crash when resizing (#515055) - try to improve default config (#523647, #506256, #492729) - suppress install-info errors (#515999) --- screen-4.0.2-screenrc.patch | 48 ------------- screen-4.0.3-resize.patch | 116 ++++++++++++++++++++++++++++++ screen-4.0.3-screenrc.patch | 139 ++++++++++++++++++++++++++++++++++++ screen.spec | 17 +++-- 4 files changed, 268 insertions(+), 52 deletions(-) delete mode 100644 screen-4.0.2-screenrc.patch create mode 100644 screen-4.0.3-resize.patch create mode 100644 screen-4.0.3-screenrc.patch diff --git a/screen-4.0.2-screenrc.patch b/screen-4.0.2-screenrc.patch deleted file mode 100644 index ffe7f8f..0000000 --- a/screen-4.0.2-screenrc.patch +++ /dev/null @@ -1,48 +0,0 @@ ---- screen-4.0.2/etc/screenrc.screenrc 2003-12-05 13:59:39.000000000 +0000 -+++ screen-4.0.2/etc/screenrc 2005-02-15 10:22:19.935843952 +0000 -@@ -15,7 +15,7 @@ - startup_message off - - # emulate .logout message --pow_detach_msg "Screen session of \$LOGNAME \$:cr:\$:nl:ended." -+pow_detach_msg "Screen session of $LOGNAME $:cr:$:nl:ended." - - # advertise hardstatus support to $TERMCAP - # termcapinfo * '' 'hs:ts=\E_:fs=\E\\:ds=\E_\E\\' -@@ -60,7 +60,7 @@ - # tell screen that xterm can switch to dark background and has function - # keys. - termcapinfo xterm 'VR=\E[?5h:VN=\E[?5l' --termcapinfo xterm 'k1=\E[11~:k2=\E[12~:k3=\E[13~:k4=\E[14~' -+#termcapinfo xterm 'k1=\E[11~:k2=\E[12~:k3=\E[13~:k4=\E[14~' - termcapinfo xterm 'kh=\EOH:kI=\E[2~:kD=\E[3~:kH=\EOF:kP=\E[5~:kN=\E[6~' - - # special xterm hardstatus: use the window title. -@@ -126,9 +126,9 @@ - # Yet another hack: - # Prepend/append register [/] to the paste if ^a^] is pressed. - # This lets me have autoindent mode in vi. --register [ "\033:se noai\015a" --register ] "\033:se ai\015a" --bind ^] paste [.] -+#register [ "\033:se noai\015a" -+#register ] "\033:se ai\015a" -+#bind ^] paste [.] - - ################ - # -@@ -140,9 +140,14 @@ - # screen -t 40 2 rlogin server - - # caption always "%3n %t%? @%u%?%? [%h]%?%=%c" -+## alternative caption, gives window list, LOGNAME and current date: -+# caption always "%{wk}%?%-Lw%?%{bw}%n*%f %t%?(%u)%?%{wk}%?%+Lw %=%{mk}@%H %{yk}%D %{ck}%M%{wk} %{ck}%d %{gk}%c" - # hardstatus alwaysignore - # hardstatus alwayslastline "%Lw" - -+# Red Hat's normal status line -+hardstatus string "[screen %n%?: %t%?] %h" -+ - # bind = resize = - # bind + resize +1 - # bind - resize -1 diff --git a/screen-4.0.3-resize.patch b/screen-4.0.3-resize.patch new file mode 100644 index 0000000..da4ea77 --- /dev/null +++ b/screen-4.0.3-resize.patch @@ -0,0 +1,116 @@ +commit 45d0c395945d2ae0f99748d030a8bffcb4cb46f9 +Author: Sadrul Habib Chowdhury +Date: Wed Sep 23 16:22:06 2009 -0400 + + Fix a crash when resizing. + + The alternate screen has to be reset after a resize. Thanks to + Enrico Scholz for pointing + this out. Closes savannah bug #26742. + +diff --git a/src/resize.c b/src/resize.c +index 0bf5f3d..5477bb7 100644 +--- a/src/resize.c ++++ b/src/resize.c +@@ -497,6 +497,7 @@ CheckMaxSize(wi) + int wi; + { + unsigned char *oldnull = null; ++ unsigned char *oldblank = blank; + struct win *p; + int i; + struct mline *ml; +@@ -542,49 +543,34 @@ int wi; + # endif + #endif + ++#define RESET_AFC(x, bl) do { if (x == old##bl) x = bl; } while (0) ++ ++#define RESET_LINES(lines, count) \ ++ do { \ ++ ml = lines; \ ++ for (i = 0; i < count; i++, ml++) \ ++ { \ ++ RESET_AFC(ml->image, blank); \ ++ RESET_AFC(ml->attr, null); \ ++ IFFONT(RESET_AFC(ml->font, null)); \ ++ IFCOLOR(RESET_AFC(ml->color, null)); \ ++ IFCOLORX(RESET_AFC(ml->colorx, null)); \ ++ } \ ++ } while (0) ++ + /* We have to run through all windows to substitute +- * the null references. ++ * the null and blank references. + */ + for (p = windows; p; p = p->w_next) + { +- ml = p->w_mlines; +- for (i = 0; i < p->w_height; i++, ml++) +- { +- if (ml->attr == oldnull) +- ml->attr = null; +-#ifdef FONT +- if (ml->font == oldnull) +- ml->font = null; +-#endif +-#ifdef COLOR +- if (ml->color == oldnull) +- ml->color= null; +-#ifdef COLORS256 +- if (ml->colorx == oldnull) +- ml->colorx = null; +-#endif +-#endif +- } ++ RESET_LINES(p->w_mlines, p->w_height); ++ + #ifdef COPY_PASTE +- ml = p->w_hlines; +- for (i = 0; i < p->w_histheight; i++, ml++) +- { +- if (ml->attr == oldnull) +- ml->attr = null; +-# ifdef FONT +- if (ml->font == oldnull) +- ml->font = null; +-# endif +-# ifdef COLOR +- if (ml->color == oldnull) +- ml->color= null; +-# ifdef COLORS256 +- if (ml->colorx == oldnull) +- ml->colorx = null; +-# endif +-# endif +- } ++ RESET_LINES(p->w_hlines, p->w_histheight); ++ RESET_LINES(p->w_alt_hlines, p->w_alt_histheight); + #endif ++ ++ RESET_LINES(p->w_alt_mlines, p->w_alt_height); + } + } + +commit 7cb17d54cc8fca88e17d6d1e7be2fd49daef1b9d +Author: Enrico Scholz +Date: Wed Sep 23 16:24:21 2009 -0400 + + Typo fix. + + Fixing this typo fixes this crash: + https://bugzilla.redhat.com/show_bug.cgi?id=515055 + +diff --git a/src/resize.c b/src/resize.c +index 5477bb7..9c7b70f 100644 +--- a/src/resize.c ++++ b/src/resize.c +@@ -517,7 +517,7 @@ int wi; + #ifdef COLOR + mline_old.color = (unsigned char *)xrealloc((char *)mline_old.color, maxwidth); + # ifdef COLORS256 +- mline_old.colorx = (unsigned char *)xrealloc((char *)mline_old.color, maxwidth); ++ mline_old.colorx = (unsigned char *)xrealloc((char *)mline_old.colorx, maxwidth); + # endif + #endif + if (!(blank && null && mline_old.image && mline_old.attr IFFONT(&& mline_old.font) IFCOLOR(&& mline_old.color) IFCOLORX(&& mline_old.colorx))) diff --git a/screen-4.0.3-screenrc.patch b/screen-4.0.3-screenrc.patch new file mode 100644 index 0000000..66b367d --- /dev/null +++ b/screen-4.0.3-screenrc.patch @@ -0,0 +1,139 @@ +diff -up screen-4.0.3/etc/etcscreenrc.screenrc screen-4.0.3/etc/etcscreenrc +--- screen-4.0.3/etc/etcscreenrc.screenrc 2003-12-05 14:46:13.000000000 +0100 ++++ screen-4.0.3/etc/etcscreenrc 2009-09-25 14:20:31.000000000 +0200 +@@ -55,15 +55,15 @@ terminfo sun 'up=^K:AL=\E[%p1%dL:DL=\E[% + #xterm understands both im/ic and doesn't have a status line. + #Note: Do not specify im and ic in the real termcap/info file as + #some programs (e.g. vi) will (no,no, may (jw)) not work anymore. +-termcap xterm|fptwist hs@:cs=\E[%i%d;%dr:im=\E[4h:ei=\E[4l +-terminfo xterm|fptwist hs@:cs=\E[%i%p1%d;%p2%dr:im=\E[4h:ei=\E[4l ++#termcap xterm|fptwist hs@:cs=\E[%i%d;%dr:im=\E[4h:ei=\E[4l ++#terminfo xterm|fptwist hs@:cs=\E[%i%p1%d;%p2%dr:im=\E[4h:ei=\E[4l + + # Long time I had this in my private screenrc file. But many people + # seem to want it (jw): + # we do not want the width to change to 80 characters on startup: + # on suns, /etc/termcap has :is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l: +-termcap xterm 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l' +-terminfo xterm 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l' ++#termcap xterm 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l' ++#terminfo xterm 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l' + + # + # Do not use xterms alternate window buffer. +diff -up screen-4.0.3/etc/screenrc.screenrc screen-4.0.3/etc/screenrc +--- screen-4.0.3/etc/screenrc.screenrc 2006-10-23 15:06:32.000000000 +0200 ++++ screen-4.0.3/etc/screenrc 2009-09-25 14:31:30.000000000 +0200 +@@ -1,21 +1,11 @@ +-# +-# Example of a user's .screenrc file +-# +- + # This is how one can set a reattach password: + # password ODSJQf.4IJN7E # "1234" + +-# no annoying audible bell, please +-vbell on +- +-# detach on hangup +-autodetach on +- + # don't display the copyright page + startup_message off + + # emulate .logout message +-pow_detach_msg "Screen session of \$LOGNAME \$:cr:\$:nl:ended." ++pow_detach_msg "Screen session of $LOGNAME $:cr:$:nl:ended." + + # advertise hardstatus support to $TERMCAP + # termcapinfo * '' 'hs:ts=\E_:fs=\E\\:ds=\E_\E\\' +@@ -40,18 +30,12 @@ defscrollback 1000 + + ################ + # +-# xterm tweaks ++# more xterm tweaks + # + +-#xterm understands both im/ic and doesn't have a status line. +-#Note: Do not specify im and ic in the real termcap/info file as +-#some programs (e.g. vi) will not work anymore. +-termcap xterm hs@:cs=\E[%i%d;%dr:im=\E[4h:ei=\E[4l +-terminfo xterm hs@:cs=\E[%i%p1%d;%p2%dr:im=\E[4h:ei=\E[4l +- + #80/132 column switching must be enabled for ^AW to work + #change init sequence to not switch width +-termcapinfo xterm Z0=\E[?3h:Z1=\E[?3l:is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l ++#termcapinfo xterm Z0=\E[?3h:Z1=\E[?3l:is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l + + # Make the output buffer large for (fast) xterms. + #termcapinfo xterm* OL=10000 +@@ -60,14 +44,14 @@ termcapinfo xterm* OL=100 + # tell screen that xterm can switch to dark background and has function + # keys. + termcapinfo xterm 'VR=\E[?5h:VN=\E[?5l' +-termcapinfo xterm 'k1=\E[11~:k2=\E[12~:k3=\E[13~:k4=\E[14~' +-termcapinfo xterm 'kh=\EOH:kI=\E[2~:kD=\E[3~:kH=\EOF:kP=\E[5~:kN=\E[6~' ++#termcapinfo xterm 'k1=\E[11~:k2=\E[12~:k3=\E[13~:k4=\E[14~' ++#termcapinfo xterm 'kh=\EOH:kI=\E[2~:kD=\E[3~:kH=\EOF:kP=\E[5~:kN=\E[6~' + + # special xterm hardstatus: use the window title. + termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007' + + #terminfo xterm 'vb=\E[?5h$<200/>\E[?5l' +-termcapinfo xterm 'vi=\E[?25l:ve=\E[34h\E[?25h:vs=\E[34l' ++#termcapinfo xterm 'vi=\E[?25l:ve=\E[34h\E[?25h:vs=\E[34l' + + # emulate part of the 'K' charset + termcapinfo xterm 'XC=K%,%\E(B,[\304,\\\\\326,]\334,{\344,|\366,}\374,~\337' +@@ -103,32 +87,12 @@ termcapinfo linux C8 + # old rxvt versions also need this + # termcapinfo rxvt C8 + +- +-################ +-# +-# keybindings +-# +- +-#remove some stupid / dangerous key bindings +-bind k +-bind ^k +-bind . +-bind ^\ +-bind \\ +-bind ^h +-bind h +-#make them better +-bind 'K' kill +-bind 'I' login on +-bind 'O' login off +-bind '}' history +- + # Yet another hack: + # Prepend/append register [/] to the paste if ^a^] is pressed. + # This lets me have autoindent mode in vi. +-register [ "\033:se noai\015a" +-register ] "\033:se ai\015a" +-bind ^] paste [.] ++#register [ "\033:se noai\015a" ++#register ] "\033:se ai\015a" ++#bind ^] paste [.] + + ################ + # +@@ -140,9 +104,14 @@ bind ^] paste [.] + # screen -t 40 2 rlogin server + + # caption always "%3n %t%? @%u%?%? [%h]%?%=%c" ++## alternative caption, gives window list, LOGNAME and current date: ++# caption always "%{wk}%?%-Lw%?%{bw}%n*%f %t%?(%u)%?%{wk}%?%+Lw %=%{mk}@%H %{yk}%D %{ck}%M%{wk} %{ck}%d %{gk}%c" + # hardstatus alwaysignore + # hardstatus alwayslastline "%Lw" + ++# Red Hat's normal status line ++hardstatus string "[screen %n%?: %t%?] %h" ++ + # bind = resize = + # bind + resize +1 + # bind - resize -1 diff --git a/screen.spec b/screen.spec index 984f50f..cbb8167 100644 --- a/screen.spec +++ b/screen.spec @@ -1,7 +1,7 @@ Summary: A screen manager that supports multiple logins on one terminal Name: screen Version: 4.0.3 -Release: 14%{?dist} +Release: 15%{?dist} License: GPLv2+ Group: Applications/System URL: http://www.gnu.org/software/screen @@ -18,13 +18,14 @@ Source1: screen.pam Patch1: screen-4.0.3-libs.patch # Some tweaks of the default screenrc -Patch2: screen-4.0.2-screenrc.patch +Patch2: screen-4.0.3-screenrc.patch Patch3: screen-4.0.3-configh.patch Patch4: screen-4.0.3-stropts.patch # Fixes potential buffer overflow when > 2^31 semicolons are passed. Patch7: screen-4.0.1-args.patch Patch11: screen-4.0.2-maxstr.patch Patch12: screen-4.0.3-ipv6.patch +Patch13: screen-4.0.3-resize.patch %description The screen utility allows you to have multiple logins on just one @@ -45,6 +46,7 @@ support multiple logins on one terminal. %patch7 -p0 -b .args %patch11 -p1 -b .maxstr %patch12 -p1 -b .ipv6 +%patch13 -p2 -b .resize %build autoconf @@ -96,12 +98,14 @@ rm -rf $RPM_BUILD_ROOT : %post -/sbin/install-info %{_infodir}/screen.info.gz %{_infodir}/dir --entry="* screen: (screen). Terminal multiplexer." ||: +/sbin/install-info %{_infodir}/screen.info.gz %{_infodir}/dir --entry="* screen: (screen). Terminal multiplexer." &> /dev/null +: %preun if [ $1 = 0 ]; then - /sbin/install-info --delete %{_infodir}/screen.info.gz %{_infodir}/dir --entry="* screen: (screen). Terminal multiplexer." ||: + /sbin/install-info --delete %{_infodir}/screen.info.gz %{_infodir}/dir --entry="* screen: (screen). Terminal multiplexer." &> /dev/null fi +: %files %defattr(-,root,root,-) @@ -115,6 +119,11 @@ fi %config(noreplace) %{_sysconfdir}/pam.d/screen %changelog +* Fri Sep 25 2009 Miroslav Lichvar - 4.0.3-15 +- fix crash when resizing (#515055) +- try to improve default config (#523647, #506256, #492729) +- suppress install-info errors (#515999) + * Sun Jul 26 2009 Fedora Release Engineering - 4.0.3-14 - Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild