Skip to content

Commit 5e6634c

Browse files
author
matz
committed
* parse.y (tokadd_string): ignore backslashed spaces in %w.
* enum.c (enum_find): do not use rb_eval_cmd(); should not accept a string for if_none. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2679 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
1 parent 2b98e10 commit 5e6634c

File tree

5 files changed

+23
-6
lines changed

5 files changed

+23
-6
lines changed

ChangeLog

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
Thu Aug 1 17:47:15 2002 Tachino Nobuhiro <tachino@jp.fujitsu.com>
2+
3+
* parse.y (tokadd_string): ignore backslashed spaces in %w.
4+
5+
Thu Aug 1 14:14:15 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
6+
7+
* enum.c (enum_find): do not use rb_eval_cmd(); should not accept
8+
a string for if_none.
9+
110
Wed Jul 31 14:11:43 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
211

312
* eval.c (rb_undef): undef should be done for klass, not ruby_class.

configure.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ AC_CHECK_FUNCS(ftello)
308308
AC_REPLACE_FUNCS(dup2 memmove mkdir strcasecmp strncasecmp strerror strftime\
309309
strchr strstr strtoul crypt flock vsnprintf\
310310
isinf isnan finite hypot acosh)
311-
AC_CHECK_FUNCS(fmod killpg drand48 random wait4 waitpid syscall chroot fsync\
311+
AC_CHECK_FUNCS(fmod killpg wait4 waitpid syscall chroot fsync\
312312
truncate chsize times utimes fcntl lockf lstat symlink readlink\
313313
setitimer setruid seteuid setreuid setresuid setproctitle\
314314
setrgid setegid setregid setresgid pause lchown lchmod\

enum.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ enum_find(argc, argv, obj)
9090
}
9191
rb_gc_force_recycle((VALUE)memo);
9292
if (!NIL_P(if_none)) {
93-
rb_eval_cmd(if_none, rb_ary_new2(0), 0);
93+
return rb_funcall(if_none, rb_intern("call"), 0, 0);
9494
}
9595
return Qnil;
9696
}

ext/socket/socket.c

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,7 @@ s_recvfrom(sock, argc, argv, from)
434434
char buf[1024];
435435
socklen_t alen = sizeof buf;
436436
VALUE len, flg;
437+
long slen;
437438
int fd, flags;
438439

439440
rb_scan_args(argc, argv, "11", &len, &flg);
@@ -447,23 +448,27 @@ s_recvfrom(sock, argc, argv, from)
447448
}
448449
fd = fileno(fptr->f);
449450

450-
str = rb_tainted_str_new(0, NUM2INT(len));
451+
slen = NUM2INT(len);
452+
str = rb_tainted_str_new(0, slen);
451453

452454
retry:
453455
rb_thread_wait_fd(fd);
454456
TRAP_BEG;
455-
RSTRING(str)->len = recvfrom(fd, RSTRING(str)->ptr, RSTRING(str)->len, flags,
456-
(struct sockaddr*)buf, &alen);
457+
slen = recvfrom(fd, RSTRING(str)->ptr, slen, flags, (struct sockaddr*)buf, &alen);
457458
TRAP_END;
458459

459-
if (RSTRING(str)->len < 0) {
460+
if (slen < 0) {
460461
switch (errno) {
461462
case EINTR:
462463
rb_thread_schedule();
463464
goto retry;
464465
}
465466
rb_sys_fail("recvfrom(2)");
466467
}
468+
if (slen < RSTRING(str)->len) {
469+
RSTRING(str)->len = slen;
470+
RSTRING(str)->ptr[slen] = '\0';
471+
}
467472
rb_obj_taint(str);
468473
switch (from) {
469474
case RECV_RECV:

parse.y

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2836,6 +2836,9 @@ tokadd_string(func, term, paren)
28362836
if (func & STR_FUNC_ESCAPE) tokadd('\\');
28372837
c = read_escape();
28382838
}
2839+
else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
2840+
/* ignore backslashed spaces in %w */
2841+
}
28392842
else if (c != term && !(paren && c == paren)) {
28402843
tokadd('\\');
28412844
}

0 commit comments

Comments
 (0)