[前][次][番号順一覧][スレッド一覧]

ruby-changes:13493

From: marcandre <ko1@a...>
Date: Fri, 9 Oct 2009 02:47:46 +0900 (JST)
Subject: [ruby-changes:13493] Ruby:r25269 (ruby_1_8): * ext/curses/curses.c: Many functions of module Curses could cause a crash if the ncurses library was not properly initialized.

marcandre	2009-10-09 02:47:34 +0900 (Fri, 09 Oct 2009)

  New Revision: 25269

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=25269

  Log:
    * ext/curses/curses.c: Many functions of module Curses could cause a crash if the ncurses library was not properly initialized.
      Fix pointed out by Alexander Beisig [ruby-core:22592]
      Functions fixed: attroff, attron, attrset, bkgd, bkgdset, can_change_color, close_screen, closed, color_content, curs_set, def_prog_mode, delch, deleteln, getmouse, getstr, has_colors, init_color, init_pair, insertln, keyname, mouseinterval, mousemask, pair_content, pair_number, reset_prog_mode, resizeterm, scrl, setscrreg, standend, standout, start_color, timeout, ungetmouse

  Modified files:
    branches/ruby_1_8/ChangeLog
    branches/ruby_1_8/ext/curses/curses.c

Index: ruby_1_8/ext/curses/curses.c
===================================================================
--- ruby_1_8/ext/curses/curses.c	(revision 25268)
+++ ruby_1_8/ext/curses/curses.c	(revision 25269)
@@ -141,6 +141,7 @@
 static VALUE
 curses_close_screen()
 {
+    curses_stdscr();
 #ifdef HAVE_ISENDWIN
     if (!isendwin())
 #endif
@@ -167,6 +168,7 @@
 curses_closed()
 {
 #ifdef HAVE_ISENDWIN
+    curses_stdscr();
     if (isendwin()) {
 	return Qtrue;
     }
@@ -355,6 +357,7 @@
 curses_standout(obj)
     VALUE obj;
 {
+    curses_stdscr();
     standout();
     return Qnil;
 }
@@ -364,6 +367,7 @@
 curses_standend(obj)
     VALUE obj;
 {
+    curses_stdscr();
     standend();
     return Qnil;
 }
@@ -429,6 +433,7 @@
 {
     char rtn[1024]; /* This should be big enough.. I hope */
 
+    curses_stdscr();
     rb_read_check(stdin);
 #if defined(HAVE_GETNSTR)
     getnstr(rtn,1023);
@@ -443,6 +448,7 @@
 curses_delch(obj)
     VALUE obj;
 {
+    curses_stdscr();
     delch();
     return Qnil;
 }
@@ -452,6 +458,7 @@
 curses_deleteln(obj)
     VALUE obj;
 {
+    curses_stdscr();
 #if defined(HAVE_DELETELN) || defined(deleteln)
     deleteln();
 #endif
@@ -463,6 +470,7 @@
 curses_insertln(obj)
     VALUE obj;
 {
+    curses_stdscr();
 #if defined(HAVE_INSERTLN) || defined(insertln)
     insertln();
 #endif
@@ -478,6 +486,7 @@
 #ifdef HAVE_KEYNAME
     const char *name;
 
+    curses_stdscr();
     name = keyname(NUM2INT(c));
     if (name) {
     return rb_str_new2(name);
@@ -506,6 +515,7 @@
 {
 #ifdef HAVE_CURS_SET
     int n;
+    curses_stdscr();
     return (n = curs_set(NUM2INT(visibility)) != ERR) ? INT2FIX(n) : Qnil;
 #else
     return Qnil;
@@ -517,6 +527,7 @@
 {
     /* may have to raise exception on ERR */
 #ifdef HAVE_SCRL
+    curses_stdscr();
     return (scrl(NUM2INT(n)) == OK) ? Qtrue : Qfalse;
 #else
     return Qfalse;
@@ -528,6 +539,7 @@
 {
     /* may have to raise exception on ERR */
 #ifdef HAVE_SETSCRREG
+    curses_stdscr();
     return (setscrreg(NUM2INT(top), NUM2INT(bottom)) == OK) ? Qtrue : Qfalse;
 #else
     return Qfalse;
@@ -537,6 +549,7 @@
 static VALUE
 curses_attroff(VALUE obj, VALUE attrs)
 {
+    curses_stdscr();
     return window_attroff(rb_stdscr,attrs);
     /* return INT2FIX(attroff(NUM2INT(attrs))); */
 }
@@ -544,6 +557,7 @@
 static VALUE
 curses_attron(VALUE obj, VALUE attrs)
 {
+    curses_stdscr();
     return window_attron(rb_stdscr,attrs);
     /* return INT2FIX(attroff(NUM2INT(attrs))); */
 }
@@ -551,6 +565,7 @@
 static VALUE
 curses_attrset(VALUE obj, VALUE attrs)
 {
+    curses_stdscr();
     return window_attrset(rb_stdscr,attrs);
     /* return INT2FIX(attroff(NUM2INT(attrs))); */
 }
@@ -559,6 +574,7 @@
 curses_bkgdset(VALUE obj, VALUE ch)
 {
 #ifdef HAVE_BKGDSET
+    curses_stdscr();
     bkgdset(NUM2CH(ch));
 #endif
     return Qnil;
@@ -568,6 +584,7 @@
 curses_bkgd(VALUE obj, VALUE ch)
 {
 #ifdef HAVE_BKGD
+    curses_stdscr();
     return (bkgd(NUM2CH(ch)) == OK) ? Qtrue : Qfalse;
 #else
     return Qfalse;
@@ -578,6 +595,7 @@
 curses_resizeterm(VALUE obj, VALUE lin, VALUE col)
 {
 #if defined(HAVE_RESIZETERM)
+    curses_stdscr();
     return (resizeterm(NUM2INT(lin),NUM2INT(col)) == OK) ? Qtrue : Qfalse;
 #else
     return Qnil;
@@ -589,6 +607,7 @@
 curses_start_color(VALUE obj)
 {
     /* may have to raise exception on ERR */
+    curses_stdscr();
     return (start_color() == OK) ? Qtrue : Qfalse;
 }
 
@@ -596,6 +615,7 @@
 curses_init_pair(VALUE obj, VALUE pair, VALUE f, VALUE b)
 {
     /* may have to raise exception on ERR */
+    curses_stdscr();
     return (init_pair(NUM2INT(pair),NUM2INT(f),NUM2INT(b)) == OK) ? Qtrue : Qfalse;
 }
 
@@ -603,6 +623,7 @@
 curses_init_color(VALUE obj, VALUE color, VALUE r, VALUE g, VALUE b)
 {
     /* may have to raise exception on ERR */
+    curses_stdscr();
     return (init_color(NUM2INT(color),NUM2INT(r),
 		     NUM2INT(g),NUM2INT(b)) == OK) ? Qtrue : Qfalse;
 }
@@ -610,12 +631,14 @@
 static VALUE
 curses_has_colors(VALUE obj)
 {
+    curses_stdscr();
     return has_colors() ? Qtrue : Qfalse;
 }
 
 static VALUE
 curses_can_change_color(VALUE obj)
 {
+    curses_stdscr();
     return can_change_color() ? Qtrue : Qfalse;
 }
 
@@ -624,6 +647,7 @@
 {
     short r,g,b;
 
+    curses_stdscr();
     color_content(NUM2INT(color),&r,&g,&b);
     return rb_ary_new3(3,INT2FIX(r),INT2FIX(g),INT2FIX(b));
 }
@@ -633,6 +657,7 @@
 {
     short f,b;
 
+    curses_stdscr();
     pair_content(NUM2INT(pair),&f,&b);
     return rb_ary_new3(2,INT2FIX(f),INT2FIX(b));
 }
@@ -646,6 +671,7 @@
 static VALUE
 curses_pair_number(VALUE obj, VALUE attrs)
 {
+    curses_stdscr();
     return INT2FIX(PAIR_NUMBER(NUM2INT(attrs)));
 }
 #endif /* USE_COLOR */
@@ -681,6 +707,7 @@
     struct mousedata *mdata;
     VALUE val;
 
+    curses_stdscr();
     val = Data_Make_Struct(cMouseEvent,struct mousedata,
 			 0,curses_mousedata_free,mdata);
     mdata->mevent = (MEVENT*)xmalloc(sizeof(MEVENT));
@@ -692,6 +719,7 @@
 {
     struct mousedata *mdata;
 
+    curses_stdscr();
     GetMOUSE(mevent,mdata);
     return (ungetmouse(mdata->mevent) == OK) ? Qtrue : Qfalse;
 }
@@ -699,12 +727,14 @@
 static VALUE
 curses_mouseinterval(VALUE obj, VALUE interval)
 {
+    curses_stdscr();
     return mouseinterval(NUM2INT(interval)) ? Qtrue : Qfalse;
 }
 
 static VALUE
 curses_mousemask(VALUE obj, VALUE mask)
 {
+    curses_stdscr();
     return INT2NUM(mousemask(NUM2UINT(mask),NULL));
 }
 
@@ -728,6 +758,7 @@
 curses_timeout(VALUE obj, VALUE delay)
 {
 #ifdef HAVE_TIMEOUT
+    curses_stdscr();
     timeout(NUM2INT(delay));
     return Qnil;
 #else
@@ -739,6 +770,7 @@
 curses_def_prog_mode(VALUE obj)
 {
 #ifdef HAVE_DEF_PROG_MODE
+    curses_stdscr();
     return def_prog_mode() == OK ? Qtrue : Qfalse;
 #else
     rb_notimplement();
@@ -749,6 +781,7 @@
 curses_reset_prog_mode(VALUE obj)
 {
 #ifdef HAVE_RESET_PROG_MODE
+    curses_stdscr();
     return reset_prog_mode() == OK ? Qtrue : Qfalse;
 #else
     rb_notimplement();
Index: ruby_1_8/ChangeLog
===================================================================
--- ruby_1_8/ChangeLog	(revision 25268)
+++ ruby_1_8/ChangeLog	(revision 25269)
@@ -1,3 +1,15 @@
+Fri Oct  9 02:39:47 2009  Marc-Andre Lafortune  <ruby-core@m...>
+
+	* ext/curses/curses.c: Many functions of module Curses could cause a
+	  crash if the ncurses library was not properly initialized.
+	  Fix pointed out by Alexander Beisig [ruby-core:22592]
+	  Functions fixed: attroff, attron, attrset, bkgd, bkgdset,
+	  can_change_color, close_screen, closed, color_content, curs_set,
+	  def_prog_mode, delch, deleteln, getmouse, getstr, has_colors,
+	  init_color, init_pair, insertln, keyname, mouseinterval, mousemask,
+	  pair_content, pair_number, reset_prog_mode, resizeterm, scrl,
+	  setscrreg, standend, standout, start_color, timeout, ungetmouse
+
 Fri Oct  9 00:34:20 2009  Marc-Andre Lafortune  <ruby-core@m...>
 
 	* lib/net/telnet.rb (cmd): Pass FailEOF options: patch by Brian

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]