[#4734] Possible regex bug? — hal9000@...
OK, I'm trying to match an optional comma followed by
[#4744] Piping in Ruby? — Stephen White <steve@...>
There's one construct I miss from shell scripts... The ability to pipe the
[#4766] Wiki — "Glen Stampoultzis" <trinexus@...>
Hi, Glen,
Howdy,
> I asked him/her. He/She opened the new site using tiki-1.0.4.
Hi, Glen,
Howdy,
[#4769] unix 'time' in Ruby? — Robert Feldt <feldt@...>
Hi.
[#4774] Module vs. Class — Jilani Khaldi <jilanik@...>
Hi,
[#4776] Listing methods in a module — DaVinci <bombadil@...>
Hi all. I need a little help :)
[#4792] closures — Stuart Zakon <zakons@...>
Can somebody please explain what a closure is within the context of
[#4809] Some questions — Friedrich Dominicus <frido@...>
[#4849] FEATURE REQUEST: Fixnum bitfields — Wayne Scott <wscott@...>
Hi,
[#4883] Re-binding a block — Dave Thomas <Dave@...>
matz@zetabits.com (Yukihiro Matsumoto) writes:
[#4916] Re: [TOY] FL — Andrew Hunt <andy@...>
> I still don't understand sorry.
[#4930] Perl 6 rumblings -- RFC 225 (v1) Data: Superpositions — Conrad Schneiker <schneik@...>
Hi,
[#4936] Ruby Book Eng. translation editor's questions — Jon Babcock <jon@...>
Nobody cares about this but me,
Thanks very much for the input.
SugHimsi.
,
[#4951] What do I need to compile 1.4? — "Glen Stampoultzis" <trinexus@...>
Platform is Windows 98
[#4987] Ruby Book Ch 2 English -- arguments/parameters/options? — Jon Babcock <jon@...>
Once again, I must impose on your good graces.
[#4992] Re: Perl 6 rumblings -- RFC 225 (v1) Data: S uperpositions (fwd) — Aleksi Niemel<aleksi.niemela@...>
Michael dared to suggest, and was probably right:
[#5009] Re: Ruby Book Ch 2 English -- arguments/parameters/options? — "Dat Nguyen" <thucdat@...>
[#5011] Changes in 1.6.0 — matz@... (Yukihiro Matsumoto)
Hi,
[#5013] A QuantumSuperposition Proposal for Ruby — Huayin Wang <wang@...>
# I have been play around the QuantumSuperpositions idea today and
[#5028] A Tru64 problem and ruby-talkietiquette — Aleksi Niemel<aleksi.niemela@...>
I just saw this (the little I could see in English)
[#5033] Having problems with Net::HTTP::do_finish — Dan Schmidt <dfan@...>
I just started using Ruby yesterday, and I'm having trouble with my
[#5045] Proposal: Add constants to Math — Robert Feldt <feldt@...>
Hi,
On Sat, 23 Sep 2000, Yukihiro Matsumoto wrote:
Hi,
On Fri, 22 Sep 2000, Masahiro Tanaka wrote:
>From: Robert Feldt <feldt@ce.chalmers.se>
[#5061] Proposal: Add rubycpp.h or include in ruby.h — Robert Feldt <feldt@...>
[#5070] Ruby Book 2.18, Eng.tl, kesaran pasaran? — Jon Babcock <jon@...>
From Ruby Book 2.18:
[#5077] Crazy idea? infix method calls — hal9000@...
This is a generalization of the "in" operator idea which I
[#5082] Application Error in 1.6.0 on Win2K — "Kevin Burge" <kcbspam@...>
I've created a 1.6.0 ruby extension (1.6.0 (2000-09-19) [i586-mswin32]),
[#5092] RE: Hanging require — Aleksi Niemel<aleksi.niemela@...>
> ruby -v a.rb
[#5114] Types and === — hal9000@...
<sigh> I imagine Yoda behind me, shaking his little green head
[#5157] Compile Problem with 1.6.1 — Scott Billings <aerogems@...>
When I try to compile Ruby 1.6.1, I get the following error:
[#5161] Re: Types and === — schneik@...
[#5175] Compiling 1.6.1 problem — Tony Reed <Callus@...>
Compiling Ruby 1.6.1 fails:
Hi,
On 9/29/00, Yukihiro Matsumoto wrote:
From: Tony Reed <Callus@Sympatico.CA>
[ruby-talk:5078] Regex.c error reporting beautifier
A patch (as an attachment) for friendlier regexp compilation problem
reporting. To be precice, now Ruby tells better what's wrong with following
cases.
There's still some work to do. Two cases of invalid_pattern, that I didn't
understand how to generate. And I didn't check the other error messages - I
expect they're quite good already.
The patch shouldn't be applied directly. The reason is that for some
formatting with snprintf I needed a buffer, and I think it does not get
cleaned up as I didn't knew how to clean it up.
Anyway, all comments are welcome.
- Aleksi
./ruby -e'p /++/.match("+++")[0]'
Previously:
-e:1: invalid regular expression: /++/
Now:
-e:1: invalid regular expression; there's no previous pattern,
to which '+' would define cardinality at 1: /++/
ruby -e'p /[/.match("foobar [")[0]'
Previously:
-e:1: invalid regular expression: /[/
Now:
-e:1: invalid regular expression; '[' can't be the last character: /[/
ruby -e'p /[]/.match("")[0]'
Previously:
-e:1: invalid regular expression: /[]/
Now:
-e:1: invalid regular expression; empty range: /[]/
/ruby -e'p /fo[[:/.match("fo[[:")[0]'
Previously:
-e:1: invalid regular expression: /fo[[:/
Now:
-e:1: invalid regular expression; re can't end '[[:': /fo[[:/
ruby -e'p /[[:alpha:]-a]/.match("")[0]'
Previously:
-e:1: invalid regular expression: /[[:alpha:]-a]/
Now:
-e:1: invalid regular expression; can't use character class as a start
value of range: /[[:alpha:]-a]/
ruby -e'p /[[:foo:]]/.match("foo")[0]'
Previously:
-e:1: invalid regular expression: /[[:foo:]]/
Now:
-e:1: invalid regular expression; foo is not a character class:
/[[:foo:]]/
ruby -e'p /[[:alnum:]/.match("")[0]'
Previously:
-e:1: invalid regular expression: /[[:alnum:]/
Now:
-e:1: invalid regular expression; range doesn't have ending ']' after a
character class: /[[:alnum:]/
ruby -e'p /foo{/.match("foo")[0]'
Previously:
-e:1: invalid regular expression: /foo{/
Now:
-e:1: invalid regular expression; '{' can't be last character: /foo{/
ruby -e'p /{a/.match("oo")[0]'
Previously:
-e:1: invalid regular expression: /{a/
Now:
-e:1: invalid regular expression; there's no previous pattern, to which
'{' would define cardinality at 1: /{a/
ruby -e'str="\\"; p %r{#{str}}.match("")[0]'
Previously:
-e:1: invalid regular expression: /\/ (RegexpError)
Now:
-e:1: invalid regular expression; '\' can't be last character: /\/
(RegexpError)
Attachments (1)
Index: regex.c
===================================================================
RCS file: /home/cvs/ruby/regex.c,v
retrieving revision 1.31
diff -u -r1.31 regex.c
--- regex.c 2000/09/22 05:37:52 1.31
+++ regex.c 2000/09/22 22:33:20
@@ -1190,6 +1190,8 @@
register unsigned int c, c1;
const char *p0;
int numlen;
+#define ERROR_MSG_MAX_SIZE 200
+ char *error_msg;
/* Address of the count-byte of the most recently inserted `exactn'
command. This makes it possible to tell whether a new exact-match
@@ -1262,6 +1264,11 @@
int options = bufp->options;
int old_options = 0;
+ error_msg = (char*)xmalloc(ERROR_MSG_MAX_SIZE+1); /* this memory should be also
+ freeed to avoid leaks,
+ dunno how and where */
+ if(!error_msg) goto memory_exhausted;
+
bufp->fastmap_accurate = 0;
bufp->must = 0;
bufp->must_skip = 0;
@@ -1318,7 +1325,10 @@
case '*':
/* If there is no previous pattern, char not special. */
if (!laststart) {
- goto invalid_pattern;
+ snprintf(error_msg, ERROR_MSG_MAX_SIZE,
+ "invalid regular expression; there's no previous pattern, to which '%c' would define cardinality at %d",
+ c, p-pattern);
+ FREE_AND_RETURN(stackb, error_msg );
}
/* If there is a sequence of repetition chars,
collapse it down to just one. */
@@ -1400,7 +1410,7 @@
case '[':
if (p == pend)
- goto invalid_pattern;
+ FREE_AND_RETURN(stackb, "invalid regular expression; '[' can't be the last character ie. can't start range at the end of pattern");
while ((b - bufp->buffer + 9 + (1 << BYTEWIDTH) / BYTEWIDTH)
> bufp->allocated)
EXTEND_BUFFER;
@@ -1441,7 +1451,7 @@
if (c == ']') {
if (p == p0 + 1) {
if (p == pend)
- goto invalid_pattern;
+ FREE_AND_RETURN(stackb, "invalid regular expression; empty range");
}
else
/* Stop if this isn't merely a ] inside a bracket
@@ -1452,7 +1462,7 @@
/* Look ahead to see if it's a range when the last thing
was a character class. */
if (had_char_class && c == '-' && *p != ']')
- goto invalid_pattern;
+ FREE_AND_RETURN(stackb, "invalid regular expression; can't use character class as a start value of range");
if (ismbchar(c)) {
PATFETCH_MBC(c);
had_mbchar++;
@@ -1582,7 +1592,7 @@
/* If pattern is `[[:'. */
if (p == pend)
- goto invalid_pattern;
+ FREE_AND_RETURN(stackb, "invalid regular expression; re can't end '[[:'");
for (;;) {
PATFETCH (c);
@@ -1611,14 +1621,17 @@
char is_upper = STREQ(str, "upper");
char is_xdigit = STREQ(str, "xdigit");
- if (!IS_CHAR_CLASS(str))
- goto invalid_pattern;
+ if (!IS_CHAR_CLASS(str)){
+ snprintf(error_msg, ERROR_MSG_MAX_SIZE,
+ "invalid regular expression; %s is not a character class", str);
+ FREE_AND_RETURN(stackb, error_msg );
+ }
/* Throw away the ] at the end of the character class. */
PATFETCH(c);
if (p == pend)
- goto invalid_pattern;
+ FREE_AND_RETURN(stackb, "invalid regular expression; range doesn't have ending ']' after a character class");
for (ch = 0; ch < 1 << BYTEWIDTH; ch++) {
if ( (is_alnum && ISALNUM(ch))
@@ -1938,9 +1951,14 @@
case '{':
/* If there is no previous pattern, this is an invalid pattern. */
- if (!laststart || p == pend) {
- goto invalid_pattern;
+ if (!laststart) {
+ snprintf(error_msg, ERROR_MSG_MAX_SIZE,
+ "invalid regular expression; there's no previous pattern, to which '{' would define cardinality at %d",
+ p-pattern);
+ FREE_AND_RETURN(stackb, error_msg );
}
+ if( p == pend)
+ FREE_AND_RETURN(stackb, "invalid regular expression; '{' can't be last character" );
beg_interval = p - 1;
@@ -2119,7 +2137,8 @@
goto normal_char;
case '\\':
- if (p == pend) goto invalid_pattern;
+ if (p == pend)
+ FREE_AND_RETURN(stackb, "invalid regular expression; '\\' can't be last character");
/* Do not translate the character after the \, so that we can
distinguish, e.g., \B from \b, even if we normally would
translate, e.g., B to b. */