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/