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

ruby-changes:13491

From: marcandre <ko1@a...>
Date: Fri, 9 Oct 2009 02:14:52 +0900 (JST)
Subject: [ruby-changes:13491] Ruby:r25267 (trunk): * 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:12:36 +0900 (Fri, 09 Oct 2009)

  New Revision: 25267

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

  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, use_default_colors

  Modified files:
    trunk/ChangeLog
    trunk/ext/curses/curses.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 25266)
+++ ChangeLog	(revision 25267)
@@ -1,3 +1,16 @@
+Fri Oct  9 02:12:02 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,
+	  use_default_colors
+
 Fri Oct  9 01:07:34 2009  Yusuke Endoh  <mame@t...>
 
 	* compile.c (ADD_TRACE): fire coverage event in ensure clause.
Index: ext/curses/curses.c
===================================================================
--- ext/curses/curses.c	(revision 25266)
+++ ext/curses/curses.c	(revision 25267)
@@ -138,6 +138,7 @@
 static VALUE
 curses_close_screen(void)
 {
+    curses_stdscr();
 #ifdef HAVE_ISENDWIN
     if (!isendwin())
 #endif
@@ -164,6 +165,7 @@
 static VALUE
 curses_closed(void)
 {
+    curses_stdscr();
     if (isendwin()) {
 	return Qtrue;
     }
@@ -355,6 +357,7 @@
 static VALUE
 curses_standout(VALUE obj)
 {
+    curses_stdscr();
     standout();
     return Qnil;
 }
@@ -363,6 +366,7 @@
 static VALUE
 curses_standend(VALUE obj)
 {
+    curses_stdscr();
     standend();
     return Qnil;
 }
@@ -430,6 +434,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 @@
 static VALUE
 curses_delch(VALUE obj)
 {
+    curses_stdscr();
     delch();
     return Qnil;
 }
@@ -451,6 +457,7 @@
 static VALUE
 curses_deleteln(VALUE obj)
 {
+    curses_stdscr();
 #if defined(HAVE_DELETELN) || defined(deleteln)
     deleteln();
 #endif
@@ -461,6 +468,7 @@
 static VALUE
 curses_insertln(VALUE obj)
 {
+    curses_stdscr();
 #if defined(HAVE_INSERTLN) || defined(insertln)
     insertln();
 #endif
@@ -475,6 +483,7 @@
     int cc = curses_char(c);
     const char *name;
 
+    curses_stdscr();
     name = keyname(cc);
     if (name) {
 	return rb_str_new_cstr(name);
@@ -510,6 +519,7 @@
 {
 #ifdef HAVE_CURS_SET
     int n;
+    curses_stdscr();
     return (n = curs_set(NUM2INT(visibility)) != ERR) ? INT2FIX(n) : Qnil;
 #else
     return Qnil;
@@ -521,6 +531,7 @@
 {
     /* may have to raise exception on ERR */
 #ifdef HAVE_SCRL
+    curses_stdscr();
     return (scrl(NUM2INT(n)) == OK) ? Qtrue : Qfalse;
 #else
     return Qfalse;
@@ -532,6 +543,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;
@@ -541,6 +553,7 @@
 static VALUE
 curses_attroff(VALUE obj, VALUE attrs)
 {
+    curses_stdscr();
     return window_attroff(rb_stdscr,attrs);
     /* return INT2FIX(attroff(NUM2INT(attrs))); */
 }
@@ -548,6 +561,7 @@
 static VALUE
 curses_attron(VALUE obj, VALUE attrs)
 {
+    curses_stdscr();
     return window_attron(rb_stdscr,attrs);
     /* return INT2FIX(attroff(NUM2INT(attrs))); */
 }
@@ -555,6 +569,7 @@
 static VALUE
 curses_attrset(VALUE obj, VALUE attrs)
 {
+    curses_stdscr();
     return window_attrset(rb_stdscr,attrs);
     /* return INT2FIX(attroff(NUM2INT(attrs))); */
 }
@@ -563,6 +578,7 @@
 curses_bkgdset(VALUE obj, VALUE ch)
 {
 #ifdef HAVE_BKGDSET
+    curses_stdscr();
     bkgdset(NUM2CH(ch));
 #endif
     return Qnil;
@@ -572,6 +588,7 @@
 curses_bkgd(VALUE obj, VALUE ch)
 {
 #ifdef HAVE_BKGD
+    curses_stdscr();
     return (bkgd(NUM2CH(ch)) == OK) ? Qtrue : Qfalse;
 #else
     return Qfalse;
@@ -582,6 +599,7 @@
 static VALUE
 curses_use_default_colors(VALUE obj)
 {
+    curses_stdscr();
     use_default_colors();
     return Qnil;
 }
@@ -635,6 +653,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;
@@ -646,6 +665,7 @@
 curses_start_color(VALUE obj)
 {
     /* may have to raise exception on ERR */
+    curses_stdscr();
     return (start_color() == OK) ? Qtrue : Qfalse;
 }
 
@@ -653,6 +673,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;
 }
 
@@ -660,6 +681,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;
 }
@@ -667,12 +689,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;
 }
 
@@ -691,6 +715,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));
 }
@@ -711,6 +736,7 @@
 {
     short f,b;
 
+    curses_stdscr();
     pair_content(NUM2INT(pair),&f,&b);
     return rb_ary_new3(2,INT2FIX(f),INT2FIX(b));
 }
@@ -724,6 +750,7 @@
 static VALUE
 curses_pair_number(VALUE obj, VALUE attrs)
 {
+    curses_stdscr();
     return INT2FIX(PAIR_NUMBER(NUM2INT(attrs)));
 }
 #endif /* USE_COLOR */
@@ -759,6 +786,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));
@@ -770,6 +798,7 @@
 {
     struct mousedata *mdata;
 
+    curses_stdscr();
     GetMOUSE(mevent,mdata);
     return (ungetmouse(mdata->mevent) == OK) ? Qtrue : Qfalse;
 }
@@ -777,12 +806,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));
 }
 
@@ -806,6 +837,7 @@
 static VALUE
 curses_timeout(VALUE obj, VALUE delay)
 {
+    curses_stdscr();
     timeout(NUM2INT(delay));
     return Qnil;
 }
@@ -817,6 +849,7 @@
 static VALUE
 curses_def_prog_mode(VALUE obj)
 {
+    curses_stdscr();
     return def_prog_mode() == OK ? Qtrue : Qfalse;
 }
 #else
@@ -827,6 +860,7 @@
 static VALUE
 curses_reset_prog_mode(VALUE obj)
 {
+    curses_stdscr();
     return reset_prog_mode() == OK ? Qtrue : Qfalse;
 }
 #else

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

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