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

* 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@13513 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2007-09-25 20:12:19 +00:00
parent b0001e9212
commit 8ca32b6e6e
4 changed files with 55 additions and 23 deletions

View file

@ -1,3 +1,9 @@
Wed Sep 26 05:12:17 2007 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.
Mon Sep 24 16:52:11 2007 Urabe Shyouhei <shyouhei@ruby-lang.org>
* lib/net/http.rb: fix typo.

29
parse.y
View file

@ -2516,7 +2516,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);
@ -2535,17 +2537,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

@ -1,7 +1,7 @@
#define RUBY_VERSION "1.8.6"
#define RUBY_RELEASE_DATE "2007-09-23"
#define RUBY_RELEASE_DATE "2007-09-26"
#define RUBY_VERSION_CODE 186
#define RUBY_RELEASE_CODE 20070923
#define RUBY_RELEASE_CODE 20070926
#define RUBY_PATCHLEVEL 5000
#define RUBY_VERSION_MAJOR 1
@ -9,7 +9,7 @@
#define RUBY_VERSION_TEENY 6
#define RUBY_RELEASE_YEAR 2007
#define RUBY_RELEASE_MONTH 9
#define RUBY_RELEASE_DAY 23
#define RUBY_RELEASE_DAY 26
#ifdef RUBY_EXTERN
RUBY_EXTERN const char ruby_version[];