1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

merge revision(s) 13513:

* parse.y (yyerror): limit error message length.  [ruby-dev:31848]
	* regex.c (re_mbc_startpos): separated from re_adjust_startpos.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_5@16786 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
shyouhei 2008-06-03 07:15:05 +00:00
parent 4a8544e2be
commit dcdffdb03b
4 changed files with 53 additions and 21 deletions

View file

@ -1,3 +1,9 @@
Tue Jun 3 16:13:40 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
* parse.y (yyerror): limit error message length. [ruby-dev:31848]
* regex.c (re_mbc_startpos): separated from re_adjust_startpos.
Tue Jun 3 15:27:11 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
* gc.c (os_obj_of, os_each_obj): hide objects to be finalized.

29
parse.y
View file

@ -2521,7 +2521,9 @@ static int
yyerror(msg)
const char *msg;
{
char *p, *pe, *buf;
const int max_line_margin = 30;
const char *p, *pe;
char *buf;
int len, i;
rb_compile_error("%s", msg);
@ -2540,17 +2542,32 @@ yyerror(msg)
len = pe - p;
if (len > 4) {
char *p2;
const char *pre = "", *post = "";
if (len > max_line_margin * 2 + 10) {
int re_mbc_startpos _((const char *, int, int, int));
if ((len = lex_p - p) > max_line_margin) {
p = p + re_mbc_startpos(p, len, len - max_line_margin, 0);
pre = "...";
}
if ((len = pe - lex_p) > max_line_margin) {
pe = lex_p + re_mbc_startpos(lex_p, len, max_line_margin, 1);
post = "...";
}
len = pe - p;
}
buf = ALLOCA_N(char, len+2);
MEMCPY(buf, p, char, len);
buf[len] = '\0';
rb_compile_error_append("%s", buf);
rb_compile_error_append("%s%s%s", pre, buf, post);
i = lex_p - p;
p = buf; pe = p + len;
p2 = buf; pe = buf + len;
while (p < pe) {
if (*p != '\t') *p = ' ';
p++;
while (p2 < pe) {
if (*p2 != '\t') *p2 = ' ';
p2++;
}
buf[i] = '^';
buf[i+1] = '\0';

37
regex.c
View file

@ -3108,6 +3108,28 @@ re_compile_fastmap(bufp)
}
/* adjust startpos value to the position between characters. */
int
re_mbc_startpos(string, size, startpos, range)
const char *string;
int size, startpos, range;
{
int i = mbc_startpos(string, startpos);
if (i < startpos) {
if (range > 0) {
startpos = i + mbclen(string[i]);
}
else {
int len = mbclen(string[i]);
if (i + len <= startpos)
startpos = i + len;
else
startpos = i;
}
}
return startpos;
}
int
re_adjust_startpos(bufp, string, size, startpos, range)
struct re_pattern_buffer *bufp;
@ -3121,20 +3143,7 @@ re_adjust_startpos(bufp, string, size, startpos, range)
/* Adjust startpos for mbc string */
if (current_mbctype && startpos>0 && !(bufp->options&RE_OPTIMIZE_BMATCH)) {
int i = mbc_startpos(string, startpos);
if (i < startpos) {
if (range > 0) {
startpos = i + mbclen(string[i]);
}
else {
int len = mbclen(string[i]);
if (i + len <= startpos)
startpos = i + len;
else
startpos = i;
}
}
startpos = re_mbc_startpos(string, size, startpos, range);
}
return startpos;
}

View file

@ -2,7 +2,7 @@
#define RUBY_RELEASE_DATE "2008-06-03"
#define RUBY_VERSION_CODE 185
#define RUBY_RELEASE_CODE 20080603
#define RUBY_PATCHLEVEL 123
#define RUBY_PATCHLEVEL 124
#define RUBY_VERSION_MAJOR 1
#define RUBY_VERSION_MINOR 8