summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-11-24 07:02:04 +0000
committershyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-11-24 07:02:04 +0000
commit5f10f475311fa4e08ff8a91e6329c6853ee3e470 (patch)
tree628d0fbfb3a59ed329f57cb64b7b58f8281130c9
parentb27be82d83f65c62ac0ff588eb60ba391a932bef (diff)
merge revision(s) 25269:
* 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 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@25899 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog12
-rw-r--r--ext/curses/curses.c33
-rw-r--r--version.h8
3 files changed, 49 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index f0ea8fc82f..7ec9e67dff 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+Tue Nov 24 15:51:07 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * 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 Nov 20 15:49:59 2009 Tanaka Akira <akr@fsij.org>
* lib/resolv.rb (Resolv::DNS.bind_random_port): bind to "::" for IPv6.
diff --git a/ext/curses/curses.c b/ext/curses/curses.c
index 9c51a2127f..b405d29b17 100644
--- a/ext/curses/curses.c
+++ b/ext/curses/curses.c
@@ -141,6 +141,7 @@ curses_init_screen()
static VALUE
curses_close_screen()
{
+ curses_stdscr();
#ifdef HAVE_ISENDWIN
if (!isendwin())
#endif
@@ -167,6 +168,7 @@ static VALUE
curses_closed()
{
#ifdef HAVE_ISENDWIN
+ curses_stdscr();
if (isendwin()) {
return Qtrue;
}
@@ -355,6 +357,7 @@ static VALUE
curses_standout(obj)
VALUE obj;
{
+ curses_stdscr();
standout();
return Qnil;
}
@@ -364,6 +367,7 @@ static VALUE
curses_standend(obj)
VALUE obj;
{
+ curses_stdscr();
standend();
return Qnil;
}
@@ -429,6 +433,7 @@ curses_getstr(obj)
{
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(obj)
VALUE obj;
{
+ curses_stdscr();
delch();
return Qnil;
}
@@ -452,6 +458,7 @@ static VALUE
curses_deleteln(obj)
VALUE obj;
{
+ curses_stdscr();
#if defined(HAVE_DELETELN) || defined(deleteln)
deleteln();
#endif
@@ -463,6 +470,7 @@ static VALUE
curses_insertln(obj)
VALUE obj;
{
+ curses_stdscr();
#if defined(HAVE_INSERTLN) || defined(insertln)
insertln();
#endif
@@ -478,6 +486,7 @@ curses_keyname(obj, c)
#ifdef HAVE_KEYNAME
const char *name;
+ curses_stdscr();
name = keyname(NUM2INT(c));
if (name) {
return rb_str_new2(name);
@@ -506,6 +515,7 @@ curses_curs_set(VALUE obj, VALUE visibility)
{
#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 @@ curses_scrl(VALUE obj, VALUE n)
{
/* 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 @@ curses_setscrreg(VALUE obj, VALUE top, VALUE bottom)
{
/* 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 @@ curses_setscrreg(VALUE obj, VALUE top, VALUE bottom)
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 @@ curses_attroff(VALUE obj, VALUE attrs)
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 @@ curses_attron(VALUE obj, VALUE attrs)
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 @@ static VALUE
curses_bkgdset(VALUE obj, VALUE ch)
{
#ifdef HAVE_BKGDSET
+ curses_stdscr();
bkgdset(NUM2CH(ch));
#endif
return Qnil;
@@ -568,6 +584,7 @@ static VALUE
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 @@ static VALUE
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 @@ static VALUE
curses_start_color(VALUE obj)
{
/* may have to raise exception on ERR */
+ curses_stdscr();
return (start_color() == OK) ? Qtrue : Qfalse;
}
@@ -596,6 +615,7 @@ static VALUE
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 @@ static VALUE
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 @@ curses_init_color(VALUE obj, VALUE color, VALUE r, VALUE g, VALUE b)
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 @@ curses_color_content(VALUE obj, VALUE color)
{
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 @@ curses_pair_content(VALUE obj, VALUE pair)
{
short f,b;
+ curses_stdscr();
pair_content(NUM2INT(pair),&f,&b);
return rb_ary_new3(2,INT2FIX(f),INT2FIX(b));
}
@@ -646,6 +671,7 @@ curses_color_pair(VALUE obj, VALUE attrs)
static VALUE
curses_pair_number(VALUE obj, VALUE attrs)
{
+ curses_stdscr();
return INT2FIX(PAIR_NUMBER(NUM2INT(attrs)));
}
#endif /* USE_COLOR */
@@ -681,6 +707,7 @@ curses_getmouse(VALUE obj)
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 @@ curses_ungetmouse(VALUE obj, VALUE mevent)
{
struct mousedata *mdata;
+ curses_stdscr();
GetMOUSE(mevent,mdata);
return (ungetmouse(mdata->mevent) == OK) ? Qtrue : Qfalse;
}
@@ -699,12 +727,14 @@ curses_ungetmouse(VALUE obj, VALUE mevent)
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 @@ static VALUE
curses_timeout(VALUE obj, VALUE delay)
{
#ifdef HAVE_TIMEOUT
+ curses_stdscr();
timeout(NUM2INT(delay));
return Qnil;
#else
@@ -739,6 +770,7 @@ static VALUE
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 @@ static VALUE
curses_reset_prog_mode(VALUE obj)
{
#ifdef HAVE_RESET_PROG_MODE
+ curses_stdscr();
return reset_prog_mode() == OK ? Qtrue : Qfalse;
#else
rb_notimplement();
diff --git a/version.h b/version.h
index 0d78f76195..cc58778981 100644
--- a/version.h
+++ b/version.h
@@ -1,15 +1,15 @@
#define RUBY_VERSION "1.8.7"
-#define RUBY_RELEASE_DATE "2009-11-20"
+#define RUBY_RELEASE_DATE "2009-11-24"
#define RUBY_VERSION_CODE 187
-#define RUBY_RELEASE_CODE 20091120
-#define RUBY_PATCHLEVEL 216
+#define RUBY_RELEASE_CODE 20091124
+#define RUBY_PATCHLEVEL 217
#define RUBY_VERSION_MAJOR 1
#define RUBY_VERSION_MINOR 8
#define RUBY_VERSION_TEENY 7
#define RUBY_RELEASE_YEAR 2009
#define RUBY_RELEASE_MONTH 11
-#define RUBY_RELEASE_DAY 20
+#define RUBY_RELEASE_DAY 24
#ifdef RUBY_EXTERN
RUBY_EXTERN const char ruby_version[];