2004-03-05 18:31:51 +03:00
|
|
|
/**********************************************************************
|
|
|
|
regerror.c - Oniguruma (regular expression library)
|
|
|
|
**********************************************************************/
|
2004-11-04 17:31:26 +03:00
|
|
|
/*-
|
2006-03-23 15:08:08 +03:00
|
|
|
* Copyright (c) 2002-2006 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
|
2004-11-04 17:31:26 +03:00
|
|
|
* All rights reserved.
|
|
|
|
*
|
|
|
|
* Redistribution and use in source and binary forms, with or without
|
|
|
|
* modification, are permitted provided that the following conditions
|
|
|
|
* are met:
|
|
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer.
|
|
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
|
|
* documentation and/or other materials provided with the distribution.
|
|
|
|
*
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
|
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
|
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
|
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
|
|
* SUCH DAMAGE.
|
|
|
|
*/
|
|
|
|
|
2004-03-05 18:31:51 +03:00
|
|
|
#include "regint.h"
|
|
|
|
#include <stdio.h> /* for vsnprintf() */
|
|
|
|
|
2006-02-04 15:31:19 +03:00
|
|
|
#ifdef HAVE_STDARG_PROTOTYPES
|
2004-03-05 18:31:51 +03:00
|
|
|
#include <stdarg.h>
|
2006-02-04 15:31:19 +03:00
|
|
|
#define va_init_list(a,b) va_start(a,b)
|
|
|
|
#else
|
|
|
|
#include <varargs.h>
|
|
|
|
#define va_init_list(a,b) va_start(a)
|
|
|
|
#endif
|
2004-03-05 18:31:51 +03:00
|
|
|
|
2006-02-04 15:31:19 +03:00
|
|
|
extern UChar*
|
2004-03-05 18:31:51 +03:00
|
|
|
onig_error_code_to_format(int code)
|
|
|
|
{
|
|
|
|
char *p;
|
|
|
|
|
2006-02-04 15:31:19 +03:00
|
|
|
if (code >= 0) return (UChar* )0;
|
2004-03-05 18:31:51 +03:00
|
|
|
|
|
|
|
switch (code) {
|
|
|
|
case ONIG_MISMATCH:
|
|
|
|
p = "mismatch"; break;
|
|
|
|
case ONIG_NO_SUPPORT_CONFIG:
|
|
|
|
p = "no support in this configuration"; break;
|
|
|
|
case ONIGERR_MEMORY:
|
|
|
|
p = "fail to memory allocation"; break;
|
|
|
|
case ONIGERR_MATCH_STACK_LIMIT_OVER:
|
|
|
|
p = "match-stack limit over"; break;
|
|
|
|
case ONIGERR_TYPE_BUG:
|
|
|
|
p = "undefined type (bug)"; break;
|
|
|
|
case ONIGERR_PARSER_BUG:
|
|
|
|
p = "internal parser error (bug)"; break;
|
|
|
|
case ONIGERR_STACK_BUG:
|
|
|
|
p = "stack error (bug)"; break;
|
|
|
|
case ONIGERR_UNDEFINED_BYTECODE:
|
|
|
|
p = "undefined bytecode (bug)"; break;
|
|
|
|
case ONIGERR_UNEXPECTED_BYTECODE:
|
|
|
|
p = "unexpected bytecode (bug)"; break;
|
|
|
|
case ONIGERR_DEFAULT_ENCODING_IS_NOT_SETTED:
|
|
|
|
p = "default multibyte-encoding is not setted"; break;
|
|
|
|
case ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR:
|
|
|
|
p = "can't convert to wide-char on specified multibyte-encoding"; break;
|
|
|
|
case ONIGERR_INVALID_ARGUMENT:
|
|
|
|
p = "invalid argument"; break;
|
|
|
|
case ONIGERR_END_PATTERN_AT_LEFT_BRACE:
|
|
|
|
p = "end pattern at left brace"; break;
|
|
|
|
case ONIGERR_END_PATTERN_AT_LEFT_BRACKET:
|
|
|
|
p = "end pattern at left bracket"; break;
|
|
|
|
case ONIGERR_EMPTY_CHAR_CLASS:
|
|
|
|
p = "empty char-class"; break;
|
|
|
|
case ONIGERR_PREMATURE_END_OF_CHAR_CLASS:
|
|
|
|
p = "premature end of char-class"; break;
|
2005-01-28 18:02:36 +03:00
|
|
|
case ONIGERR_END_PATTERN_AT_ESCAPE:
|
|
|
|
p = "end pattern at escape"; break;
|
2004-03-05 18:31:51 +03:00
|
|
|
case ONIGERR_END_PATTERN_AT_META:
|
|
|
|
p = "end pattern at meta"; break;
|
|
|
|
case ONIGERR_END_PATTERN_AT_CONTROL:
|
|
|
|
p = "end pattern at control"; break;
|
|
|
|
case ONIGERR_META_CODE_SYNTAX:
|
|
|
|
p = "illegal meta-code syntax"; break;
|
|
|
|
case ONIGERR_CONTROL_CODE_SYNTAX:
|
|
|
|
p = "illegal control-code syntax"; break;
|
|
|
|
case ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE:
|
|
|
|
p = "char-class value at end of range"; break;
|
|
|
|
case ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE:
|
|
|
|
p = "char-class value at start of range"; break;
|
|
|
|
case ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS:
|
|
|
|
p = "unmatched range specifier in char-class"; break;
|
|
|
|
case ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED:
|
|
|
|
p = "target of repeat operator is not specified"; break;
|
|
|
|
case ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID:
|
|
|
|
p = "target of repeat operator is invalid"; break;
|
|
|
|
case ONIGERR_NESTED_REPEAT_OPERATOR:
|
|
|
|
p = "nested repeat operator"; break;
|
|
|
|
case ONIGERR_UNMATCHED_CLOSE_PARENTHESIS:
|
|
|
|
p = "unmatched close parenthesis"; break;
|
|
|
|
case ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS:
|
|
|
|
p = "end pattern with unmatched parenthesis"; break;
|
|
|
|
case ONIGERR_END_PATTERN_IN_GROUP:
|
|
|
|
p = "end pattern in group"; break;
|
|
|
|
case ONIGERR_UNDEFINED_GROUP_OPTION:
|
|
|
|
p = "undefined group option"; break;
|
|
|
|
case ONIGERR_INVALID_POSIX_BRACKET_TYPE:
|
|
|
|
p = "invalid POSIX bracket type"; break;
|
|
|
|
case ONIGERR_INVALID_LOOK_BEHIND_PATTERN:
|
|
|
|
p = "invalid pattern in look-behind"; break;
|
|
|
|
case ONIGERR_INVALID_REPEAT_RANGE_PATTERN:
|
|
|
|
p = "invalid repeat range {lower,upper}"; break;
|
|
|
|
case ONIGERR_TOO_BIG_NUMBER:
|
|
|
|
p = "too big number"; break;
|
|
|
|
case ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE:
|
|
|
|
p = "too big number for repeat range"; break;
|
|
|
|
case ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE:
|
|
|
|
p = "upper is smaller than lower in repeat range"; break;
|
|
|
|
case ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS:
|
|
|
|
p = "empty range in char class"; break;
|
|
|
|
case ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE:
|
|
|
|
p = "mismatch multibyte code length in char-class range"; break;
|
|
|
|
case ONIGERR_TOO_MANY_MULTI_BYTE_RANGES:
|
|
|
|
p = "too many multibyte code ranges are specified"; break;
|
|
|
|
case ONIGERR_TOO_SHORT_MULTI_BYTE_STRING:
|
|
|
|
p = "too short multibyte code string"; break;
|
|
|
|
case ONIGERR_TOO_BIG_BACKREF_NUMBER:
|
|
|
|
p = "too big backref number"; break;
|
|
|
|
case ONIGERR_INVALID_BACKREF:
|
|
|
|
#ifdef USE_NAMED_GROUP
|
|
|
|
p = "invalid backref number/name"; break;
|
|
|
|
#else
|
|
|
|
p = "invalid backref number"; break;
|
|
|
|
#endif
|
|
|
|
case ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED:
|
|
|
|
p = "numbered backref/call is not allowed. (use name)"; break;
|
|
|
|
case ONIGERR_TOO_BIG_WIDE_CHAR_VALUE:
|
|
|
|
p = "too big wide-char value"; break;
|
|
|
|
case ONIGERR_TOO_LONG_WIDE_CHAR_VALUE:
|
|
|
|
p = "too long wide-char value"; break;
|
|
|
|
case ONIGERR_INVALID_WIDE_CHAR_VALUE:
|
|
|
|
p = "invalid wide-char value"; break;
|
|
|
|
case ONIGERR_EMPTY_GROUP_NAME:
|
|
|
|
p = "group name is empty"; break;
|
|
|
|
case ONIGERR_INVALID_GROUP_NAME:
|
|
|
|
p = "invalid group name <%n>"; break;
|
|
|
|
case ONIGERR_INVALID_CHAR_IN_GROUP_NAME:
|
|
|
|
#ifdef USE_NAMED_GROUP
|
|
|
|
p = "invalid char in group name <%n>"; break;
|
|
|
|
#else
|
|
|
|
p = "invalid char in group number <%n>"; break;
|
|
|
|
#endif
|
|
|
|
case ONIGERR_UNDEFINED_NAME_REFERENCE:
|
|
|
|
p = "undefined name <%n> reference"; break;
|
|
|
|
case ONIGERR_UNDEFINED_GROUP_REFERENCE:
|
|
|
|
p = "undefined group <%n> reference"; break;
|
|
|
|
case ONIGERR_MULTIPLEX_DEFINED_NAME:
|
|
|
|
p = "multiplex defined name <%n>"; break;
|
|
|
|
case ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL:
|
|
|
|
p = "multiplex definition name <%n> call"; break;
|
|
|
|
case ONIGERR_NEVER_ENDING_RECURSION:
|
|
|
|
p = "never ending recursion"; break;
|
|
|
|
case ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY:
|
|
|
|
p = "group number is too big for capture history"; break;
|
|
|
|
case ONIGERR_INVALID_CHAR_PROPERTY_NAME:
|
2004-03-16 18:20:15 +03:00
|
|
|
p = "invalid character property name {%n}"; break;
|
2004-11-04 17:31:26 +03:00
|
|
|
case ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION:
|
|
|
|
p = "not supported encoding combination"; break;
|
2006-03-23 15:08:08 +03:00
|
|
|
case ONIGERR_INVALID_COMBINATION_OF_OPTIONS:
|
|
|
|
p = "invalid combination of options"; break;
|
2004-03-05 18:31:51 +03:00
|
|
|
case ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT:
|
|
|
|
p = "over thread pass limit count"; break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
p = "undefined error code"; break;
|
|
|
|
}
|
|
|
|
|
2006-02-04 15:31:19 +03:00
|
|
|
return (UChar* )p;
|
2004-03-05 18:31:51 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2006-10-28 15:15:41 +04:00
|
|
|
static int to_ascii(OnigEncoding enc, UChar *s, UChar *end,
|
|
|
|
UChar buf[], int buf_size, int *is_over)
|
|
|
|
{
|
|
|
|
int len;
|
|
|
|
UChar *p;
|
|
|
|
OnigCodePoint code;
|
|
|
|
|
|
|
|
if (ONIGENC_MBC_MINLEN(enc) > 1) {
|
|
|
|
p = s;
|
|
|
|
len = 0;
|
|
|
|
while (p < end) {
|
|
|
|
code = ONIGENC_MBC_TO_CODE(enc, p, end);
|
|
|
|
if (code >= 0x80) {
|
|
|
|
if (len + 5 <= buf_size) {
|
|
|
|
sprintf((char* )(&(buf[len])), "\\%03o",
|
|
|
|
(unsigned int)(code & 0377));
|
|
|
|
len += 5;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
buf[len++] = (UChar )code;
|
|
|
|
}
|
|
|
|
|
|
|
|
p += enc_len(enc, p);
|
|
|
|
if (len >= buf_size) break;
|
|
|
|
}
|
|
|
|
|
|
|
|
*is_over = ((p < end) ? 1 : 0);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
len = MIN((end - s), buf_size);
|
|
|
|
xmemcpy(buf, s, (size_t )len);
|
|
|
|
*is_over = ((buf_size < (end - s)) ? 1 : 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
return len;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2004-03-05 18:31:51 +03:00
|
|
|
/* for ONIG_MAX_ERROR_MESSAGE_LEN */
|
|
|
|
#define MAX_ERROR_PAR_LEN 30
|
|
|
|
|
|
|
|
extern int
|
2006-02-04 15:31:19 +03:00
|
|
|
#ifdef HAVE_STDARG_PROTOTYPES
|
2004-03-05 18:31:51 +03:00
|
|
|
onig_error_code_to_str(UChar* s, int code, ...)
|
2006-02-04 15:31:19 +03:00
|
|
|
#else
|
|
|
|
onig_error_code_to_str(s, code, va_alist)
|
|
|
|
UChar* s;
|
|
|
|
int code;
|
|
|
|
va_dcl
|
|
|
|
#endif
|
2004-03-05 18:31:51 +03:00
|
|
|
{
|
|
|
|
UChar *p, *q;
|
|
|
|
OnigErrorInfo* einfo;
|
2006-10-28 15:15:41 +04:00
|
|
|
int len, is_over;
|
|
|
|
UChar parbuf[MAX_ERROR_PAR_LEN];
|
2004-03-05 18:31:51 +03:00
|
|
|
va_list vargs;
|
|
|
|
|
2006-02-04 15:31:19 +03:00
|
|
|
va_init_list(vargs, code);
|
2004-03-05 18:31:51 +03:00
|
|
|
|
|
|
|
switch (code) {
|
|
|
|
case ONIGERR_UNDEFINED_NAME_REFERENCE:
|
|
|
|
case ONIGERR_UNDEFINED_GROUP_REFERENCE:
|
|
|
|
case ONIGERR_MULTIPLEX_DEFINED_NAME:
|
|
|
|
case ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL:
|
|
|
|
case ONIGERR_INVALID_GROUP_NAME:
|
|
|
|
case ONIGERR_INVALID_CHAR_IN_GROUP_NAME:
|
2004-03-16 18:20:15 +03:00
|
|
|
case ONIGERR_INVALID_CHAR_PROPERTY_NAME:
|
2004-03-05 18:31:51 +03:00
|
|
|
einfo = va_arg(vargs, OnigErrorInfo*);
|
2006-10-28 15:15:41 +04:00
|
|
|
len = to_ascii(einfo->enc, einfo->par, einfo->par_end,
|
|
|
|
parbuf, MAX_ERROR_PAR_LEN - 3, &is_over);
|
2004-03-05 18:31:51 +03:00
|
|
|
q = onig_error_code_to_format(code);
|
|
|
|
p = s;
|
|
|
|
while (*q != '\0') {
|
|
|
|
if (*q == '%') {
|
|
|
|
q++;
|
|
|
|
if (*q == 'n') { /* '%n': name */
|
2006-10-28 15:15:41 +04:00
|
|
|
xmemcpy(p, parbuf, len);
|
|
|
|
p += len;
|
|
|
|
if (is_over != 0) {
|
2004-03-05 18:31:51 +03:00
|
|
|
xmemcpy(p, "...", 3);
|
|
|
|
p += 3;
|
|
|
|
}
|
|
|
|
q++;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
goto normal_char;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
normal_char:
|
|
|
|
*p++ = *q++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*p = '\0';
|
|
|
|
len = p - s;
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
q = onig_error_code_to_format(code);
|
2004-11-04 17:31:26 +03:00
|
|
|
len = onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, q);
|
2004-03-05 18:31:51 +03:00
|
|
|
xmemcpy(s, q, len);
|
|
|
|
s[len] = '\0';
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
va_end(vargs);
|
|
|
|
return len;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void
|
2006-02-04 15:31:19 +03:00
|
|
|
#ifdef HAVE_STDARG_PROTOTYPES
|
|
|
|
onig_snprintf_with_pattern(UChar buf[], int bufsize, OnigEncoding enc,
|
|
|
|
UChar* pat, UChar* pat_end, const UChar *fmt, ...)
|
|
|
|
#else
|
|
|
|
onig_snprintf_with_pattern(buf, bufsize, enc, pat, pat_end, fmt, va_alist)
|
|
|
|
UChar buf[];
|
|
|
|
int bufsize;
|
|
|
|
OnigEncoding enc;
|
|
|
|
UChar* pat;
|
|
|
|
UChar* pat_end;
|
|
|
|
const UChar *fmt;
|
|
|
|
va_dcl
|
|
|
|
#endif
|
2004-03-05 18:31:51 +03:00
|
|
|
{
|
|
|
|
int n, need, len;
|
2004-11-04 17:31:26 +03:00
|
|
|
UChar *p, *s, *bp;
|
2006-02-04 15:31:19 +03:00
|
|
|
UChar bs[6];
|
2004-03-05 18:31:51 +03:00
|
|
|
va_list args;
|
|
|
|
|
2006-08-05 17:54:40 +04:00
|
|
|
va_init_list(args, fmt);
|
* sprintf.c (rb_str_format): allow %c to print one character
string (e.g. ?x).
* lib/tempfile.rb (Tempfile::make_tmpname): put dot between
basename and pid. [ruby-talk:196272]
* parse.y (do_block): remove -> style block.
* parse.y (parser_yylex): remove tLAMBDA_ARG.
* eval.c (rb_call0): binding for the return event hook should have
consistent scope. [ruby-core:07928]
* eval.c (proc_invoke): return behavior should depend whether it
is surrounded by a lambda or a mere block.
* eval.c (formal_assign): handles post splat arguments.
* eval.c (rb_call0): ditto.
* st.c (strhash): use FNV-1a hash.
* parse.y (parser_yylex): removed experimental ';;' terminator.
* eval.c (rb_node_arity): should be aware of post splat arguments.
* eval.c (rb_proc_arity): ditto.
* parse.y (f_args): syntax rule enhanced to support arguments
after the splat.
* parse.y (block_param): ditto for block parameters.
* parse.y (f_post_arg): mandatory formal arguments after the splat
argument.
* parse.y (new_args_gen): generate nodes for mandatory formal
arguments after the splat argument.
* eval.c (rb_eval): dispatch mandatory formal arguments after the
splat argument.
* parse.y (args): allow more than one splat in the argument list.
* parse.y (method_call): allow aref [] to accept all kind of
method argument, including assocs, splat, and block argument.
* eval.c (SETUP_ARGS0): prepare block argument as well.
* lib/mathn.rb (Integer): remove Integer#gcd2. [ruby-core:07931]
* eval.c (error_line): print receivers true/false/nil specially.
* eval.c (rb_proc_yield): handles parameters in yield semantics.
* eval.c (nil_yield): gives LocalJumpError to denote no block
error.
* io.c (rb_io_getc): now takes one-character string.
* string.c (rb_str_hash): use FNV-1a hash from Fowler/Noll/Vo
hashing algorithm.
* string.c (rb_str_aref): str[0] now returns 1 character string,
instead of a fixnum. [Ruby2]
* parse.y (parser_yylex): ?c now returns 1 character string,
instead of a fixnum. [Ruby2]
* string.c (rb_str_aset): no longer support fixnum insertion.
* eval.c (umethod_bind): should not update original class.
[ruby-dev:28636]
* eval.c (ev_const_get): should support constant access from
within instance_eval(). [ruby-dev:28327]
* time.c (time_timeval): should round for usec floating
number. [ruby-core:07896]
* time.c (time_add): ditto.
* dir.c (sys_warning): should not call a vararg function
rb_sys_warning() indirectly. [ruby-core:07886]
* numeric.c (flo_divmod): the first element of Float#divmod should
be an integer. [ruby-dev:28589]
* test/ruby/test_float.rb: add tests for divmod, div, modulo and remainder.
* re.c (rb_reg_initialize): should not allow modifying literal
regexps. frozen check moved from rb_reg_initialize_m as well.
* re.c (rb_reg_initialize): should not modify untainted objects in
safe levels higher than 3.
* re.c (rb_memcmp): type change from char* to const void*.
* dir.c (dir_close): should not close untainted dir stream.
* dir.c (GetDIR): add tainted/frozen check for each dir operation.
* lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_symbol_arg):
typo fixed. a patch from Florian Gross <florg at florg.net>.
* eval.c (EXEC_EVENT_HOOK): trace_func may remove itself from
event_hooks. no guarantee for arbitrary hook deletion.
[ruby-dev:28632]
* util.c (ruby_strtod): differ addition to minimize error.
[ruby-dev:28619]
* util.c (ruby_strtod): should not raise ERANGE when the input
string does not have any digits. [ruby-dev:28629]
* eval.c (proc_invoke): should restore old ruby_frame->block.
thanks to ts <decoux at moulon.inra.fr>. [ruby-core:07833]
also fix [ruby-dev:28614] as well.
* signal.c (trap): sig should be less then NSIG. Coverity found
this bug. a patch from Kevin Tew <tewk at tewk.com>.
[ruby-core:07823]
* math.c (math_log2): add new method inspired by
[ruby-talk:191237].
* math.c (math_log): add optional base argument to Math::log().
[ruby-talk:191308]
* ext/syck/emitter.c (syck_scan_scalar): avoid accessing
uninitialized array element. a patch from Pat Eyler
<rubypate at gmail.com>. [ruby-core:07809]
* array.c (rb_ary_fill): initialize local variables first. a
patch from Pat Eyler <rubypate at gmail.com>. [ruby-core:07810]
* ext/syck/yaml2byte.c (syck_yaml2byte_handler): need to free
type_tag. a patch from Pat Eyler <rubypate at gmail.com>.
[ruby-core:07808]
* ext/socket/socket.c (make_hostent_internal): accept ai_family
check from Sam Roberts <sroberts at uniserve.com>.
[ruby-core:07691]
* util.c (ruby_strtod): should not cut off 18 digits for no
reason. [ruby-core:07796]
* array.c (rb_ary_fill): internalize local variable "beg" to
pacify Coverity. [ruby-core:07770]
* pack.c (pack_unpack): now supports CRLF newlines. a patch from
<tommy at tmtm.org>. [ruby-dev:28601]
* applied code clean-up patch from Stefan Huehner
<stefan at huehner.org>. [ruby-core:07764]
* lib/jcode.rb (String::tr_s): should have translated non
squeezing character sequence (i.e. a character) as well. thanks
to Hiroshi Ichikawa <gimite at gimite.ddo.jp> [ruby-list:42090]
* ext/socket/socket.c: document update patch from Sam Roberts
<sroberts at uniserve.com>. [ruby-core:07701]
* lib/mathn.rb (Integer): need not to remove gcd2. a patch from
NARUSE, Yui <naruse at airemix.com>. [ruby-dev:28570]
* parse.y (arg): too much NEW_LIST()
* eval.c (SETUP_ARGS0): remove unnecessary access to nd_alen.
* eval.c (rb_eval): use ARGSCAT for NODE_OP_ASGN1.
[ruby-dev:28585]
* parse.y (arg): use NODE_ARGSCAT for placeholder.
* lib/getoptlong.rb (GetoptLong::get): RDoc update patch from
mathew <meta at pobox.com>. [ruby-core:07738]
* variable.c (rb_const_set): raise error when no target klass is
supplied. [ruby-dev:28582]
* prec.c (prec_prec_f): documentation patch from
<gerardo.santana at gmail.com>. [ruby-core:07689]
* bignum.c (rb_big_pow): second operand may be too big even if
it's a Fixnum. [ruby-talk:187984]
* README.EXT: update symbol description. [ruby-talk:188104]
* COPYING: explicitly note GPLv2. [ruby-talk:187922]
* parse.y: remove some obsolete syntax rules (unparenthesized
method calls in argument list).
* eval.c (rb_call0): insecure calling should be checked for non
NODE_SCOPE method invocations too.
* eval.c (rb_alias): should preserve the current safe level as
well as method definition.
* process.c (rb_f_sleep): remove RDoc description about SIGALRM
which is not valid on the current implementation. [ruby-dev:28464]
Thu Mar 23 21:40:47 2006 K.Kosako <sndgk393 AT ybb.ne.jp>
* eval.c (method_missing): should support argument splat in
super. a bug in combination of super, splat and
method_missing. [ruby-talk:185438]
* configure.in: Solaris SunPro compiler -rapth patch from
<kuwa at labs.fujitsu.com>. [ruby-dev:28443]
* configure.in: remove enable_rpath=no for Solaris.
[ruby-dev:28440]
* ext/win32ole/win32ole.c (ole_val2olevariantdata): change behavior
of converting OLE Variant object with VT_ARRAY|VT_UI1 and Ruby
String object.
* ruby.1: a clarification patch from David Lutterkort
<dlutter at redhat.com>. [ruby-core:7508]
* lib/rdoc/ri/ri_paths.rb (RI::Paths): adding paths from rubygems
directories. a patch from Eric Hodel <drbrain at segment7.net>.
[ruby-core:07423]
* eval.c (rb_clear_cache_by_class): clearing wrong cache.
* ext/extmk.rb: use :remove_destination to install extension libraries
to avoid SEGV. [ruby-dev:28417]
* eval.c (rb_thread_fd_writable): should not re-schedule output
from KILLED thread (must be error printing).
* array.c (rb_ary_flatten_bang): allow specifying recursion
level. [ruby-talk:182170]
* array.c (rb_ary_flatten): ditto.
* gc.c (add_heap): a heap_slots may overflow. a patch from Stefan
Weil <weil at mail.berlios.de>.
* eval.c (rb_call): use separate cache for fcall/vcall
invocation.
* eval.c (rb_eval): NODE_FCALL, NODE_VCALL can call local
functions.
* eval.c (rb_mod_local): a new method to specify newly added
visibility "local".
* eval.c (search_method): search for local methods which are
visible only from the current class.
* class.c (rb_class_local_methods): a method to list local methods.
* object.c (Init_Object): add BasicObject class as a top level
BlankSlate class.
* ruby.h (SYM2ID): should not cast to signed long.
[ruby-core:07414]
* class.c (rb_include_module): allow module duplication.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@10235 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2006-06-10 01:20:17 +04:00
|
|
|
n = vsnprintf((char* )buf, bufsize, (const char* )fmt, args);
|
2004-03-05 18:31:51 +03:00
|
|
|
va_end(args);
|
|
|
|
|
|
|
|
need = (pat_end - pat) * 4 + 4;
|
|
|
|
|
|
|
|
if (n + need < bufsize) {
|
2006-02-04 15:31:19 +03:00
|
|
|
strcat((char* )buf, ": /");
|
2004-11-04 17:31:26 +03:00
|
|
|
s = buf + onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, buf);
|
2004-03-05 18:31:51 +03:00
|
|
|
|
|
|
|
p = pat;
|
2006-02-04 15:31:19 +03:00
|
|
|
while (p < pat_end) {
|
2004-11-04 17:31:26 +03:00
|
|
|
if (*p == MC_ESC(enc)) {
|
2004-03-05 18:31:51 +03:00
|
|
|
*s++ = *p++;
|
2004-11-04 17:31:26 +03:00
|
|
|
len = enc_len(enc, p);
|
2004-03-05 18:31:51 +03:00
|
|
|
while (len-- > 0) *s++ = *p++;
|
|
|
|
}
|
|
|
|
else if (*p == '/') {
|
2004-11-04 17:31:26 +03:00
|
|
|
*s++ = (unsigned char )MC_ESC(enc);
|
2004-03-05 18:31:51 +03:00
|
|
|
*s++ = *p++;
|
|
|
|
}
|
2004-11-04 17:31:26 +03:00
|
|
|
else if (ONIGENC_IS_MBC_HEAD(enc, p)) {
|
|
|
|
len = enc_len(enc, p);
|
|
|
|
if (ONIGENC_MBC_MINLEN(enc) == 1) {
|
|
|
|
while (len-- > 0) *s++ = *p++;
|
|
|
|
}
|
|
|
|
else { /* for UTF16 */
|
|
|
|
int blen;
|
|
|
|
|
|
|
|
while (len-- > 0) {
|
2006-02-04 15:31:19 +03:00
|
|
|
sprintf((char* )bs, "\\%03o", *p++ & 0377);
|
2004-11-04 17:31:26 +03:00
|
|
|
blen = onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, bs);
|
|
|
|
bp = bs;
|
|
|
|
while (blen-- > 0) *s++ = *bp++;
|
|
|
|
}
|
|
|
|
}
|
2004-03-05 18:31:51 +03:00
|
|
|
}
|
|
|
|
else if (!ONIGENC_IS_CODE_PRINT(enc, *p) &&
|
|
|
|
!ONIGENC_IS_CODE_SPACE(enc, *p)) {
|
2006-02-04 15:31:19 +03:00
|
|
|
sprintf((char* )bs, "\\%03o", *p++ & 0377);
|
2004-11-04 17:31:26 +03:00
|
|
|
len = onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, bs);
|
|
|
|
bp = bs;
|
|
|
|
while (len-- > 0) *s++ = *bp++;
|
2004-03-05 18:31:51 +03:00
|
|
|
}
|
|
|
|
else {
|
|
|
|
*s++ = *p++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
*s++ = '/';
|
|
|
|
*s = '\0';
|
|
|
|
}
|
|
|
|
}
|