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

* ext/syck/token.c: removed YYTOKTMP references which

were causing buffer overflows on large block scalars,
  comments, quoted scalars and plain scalars.

* ext/syck/rubyext.c: dynamic changing of buffer size.

* ext/syck/syck.h: default buffer size of 4k.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@5032 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
why 2003-11-25 19:51:38 +00:00
parent 3d0d2d5ff1
commit bab2e6cfdf
6 changed files with 144 additions and 91 deletions

View file

@ -1,4 +1,4 @@
/* Generated by re2c 0.5 on Fri Oct 17 12:13:58 2003 */
/* Generated by re2c 0.5 on Sun Nov 23 14:51:02 2003 */
#line 1 "bytecode.re"
/*
* bytecode.re
@ -38,6 +38,11 @@ char *get_inline( SyckParser *parser );
*/
#define YYPOS(n) YYCURSOR = YYTOKEN + n
/*
* Track line numbers
*/
#define CHK_NL(ptr) if ( *( ptr - 1 ) == '\n' && ptr > YYLINECTPTR ) { YYLINEPTR = ptr; YYLINE++; YYLINECTPTR = YYLINEPTR; }
/*
* I like seeing the level operations as macros...
*/
@ -144,7 +149,7 @@ sycklex_bytecode_utf8( YYSTYPE *sycklval, SyckParser *parser )
return t;
}
#line 168
#line 173
lvl = CURRENT_LEVEL();
@ -182,7 +187,7 @@ yy3: yyaccept = 0;
default: goto yy4;
}
yy4:
#line 194
#line 200
{ YYPOS(0);
goto Document;
}
@ -190,9 +195,10 @@ yy5: yych = *++YYCURSOR;
goto yy4;
yy6: yych = *++YYCURSOR;
yy7:
#line 182
#line 187
{ if ( lvl->status == syck_lvl_header )
{
CHK_NL(YYCURSOR);
goto Directive;
}
else
@ -208,11 +214,9 @@ yy8: yych = *++YYCURSOR;
default: goto yy2;
}
}
#line 198
#line 204
lvl->status = syck_lvl_doc;
Document:
{
lvl = CURRENT_LEVEL();
@ -279,21 +283,22 @@ yy16: yych = *++YYCURSOR;
}
yy17: yych = *++YYCURSOR;
yy18:
#line 282
#line 289
{ ADD_BYTE_LEVEL(lvl, lvl->spaces + 1, syck_lvl_str);
goto Scalar;
}
yy19: yych = *++YYCURSOR;
yy20:
#line 286
#line 293
{ ADD_BYTE_LEVEL(lvl, lvl->spaces + 1, syck_lvl_open);
sycklval->name = get_inline( parser );
syck_hdlr_remove_anchor( parser, sycklval->name );
CHK_NL(YYCURSOR);
return YAML_ANCHOR;
}
yy21: yych = *++YYCURSOR;
yy22:
#line 292
#line 300
{ ADD_BYTE_LEVEL(lvl, lvl->spaces + 1, syck_lvl_str);
sycklval->name = get_inline( parser );
POP_LEVEL();
@ -302,10 +307,11 @@ yy22:
}
yy23: yych = *++YYCURSOR;
yy24:
#line 299
#line 307
{ char *qstr;
ADD_BYTE_LEVEL(lvl, lvl->spaces + 1, syck_lvl_open);
qstr = get_inline( parser );
CHK_NL(YYCURSOR);
if ( qstr[0] == '!' )
{
int qidx = strlen( qstr );
@ -363,12 +369,13 @@ yy24:
}
yy25: yych = *++YYCURSOR;
yy26:
#line 358
#line 367
{ goto Comment; }
yy27: yych = *++YYCURSOR;
yy28:
#line 360
{ if ( lvl->status == syck_lvl_seq )
#line 369
{ CHK_NL(YYCURSOR);
if ( lvl->status == syck_lvl_seq )
{
return YAML_INDENT;
}
@ -386,14 +393,14 @@ yy29: yych = *++YYCURSOR;
}
yy30: yych = *++YYCURSOR;
yy31:
#line 372
#line 382
{ ENSURE_YAML_IEND(lvl, -1);
YYPOS(0);
return 0;
}
yy32: yych = *++YYCURSOR;
yy33:
#line 247
#line 253
{ if ( lvl->status == syck_lvl_seq && lvl->ncount == 0 )
{
lvl->ncount++;
@ -426,6 +433,7 @@ yy33:
FORCE_NEXT_TOKEN(YAML_INDENT);
}
}
CHK_NL(YYCURSOR);
return YAML_IEND;
}
yy34: yych = *++YYCURSOR;
@ -435,13 +443,14 @@ yy34: yych = *++YYCURSOR;
}
yy35: yych = *++YYCURSOR;
yy36:
#line 233
#line 238
{ int complex = 0;
if ( lvl->ncount % 2 == 0 && ( lvl->status == syck_lvl_map || lvl->status == syck_lvl_seq ) )
{
complex = 1;
}
ADD_BYTE_LEVEL(lvl, lvl->spaces + 1, syck_lvl_seq);
CHK_NL(YYCURSOR);
if ( complex )
{
FORCE_NEXT_TOKEN( YAML_IOPEN );
@ -456,13 +465,14 @@ yy37: yych = *++YYCURSOR;
}
yy38: yych = *++YYCURSOR;
yy39:
#line 219
#line 223
{ int complex = 0;
if ( lvl->ncount % 2 == 0 && ( lvl->status == syck_lvl_map || lvl->status == syck_lvl_seq ) )
{
complex = 1;
}
ADD_BYTE_LEVEL(lvl, lvl->spaces + 1, syck_lvl_map);
CHK_NL(YYCURSOR);
if ( complex )
{
FORCE_NEXT_TOKEN( YAML_IOPEN );
@ -477,7 +487,7 @@ yy40: yych = *++YYCURSOR;
}
yy41: yych = *++YYCURSOR;
yy42:
#line 214
#line 218
{ ENSURE_YAML_IEND(lvl, -1);
YYPOS(0);
return 0;
@ -493,7 +503,7 @@ yy44: yych = *++YYCURSOR;
default: goto yy11;
}
}
#line 377
#line 387
}
@ -600,7 +610,7 @@ yy48: yyaccept = 0;
default: goto yy49;
}
yy49:
#line 389
#line 400
{ YYCURSOR = YYTOKTMP;
return YAML_DOCSEP;
}
@ -850,15 +860,16 @@ yy55: switch(yych){
}
yy56: yych = *++YYCURSOR;
yy57:
#line 387
{ goto Directive; }
#line 397
{ CHK_NL(YYCURSOR);
goto Directive; }
yy58: yych = *++YYCURSOR;
switch(yych){
case '\n': goto yy56;
default: goto yy47;
}
}
#line 392
#line 403
}
@ -883,22 +894,23 @@ yy59:
}
yy61:yy62: yych = *++YYCURSOR;
yy63:
#line 402
{ goto Document; }
#line 413
{ CHK_NL(YYCURSOR);
goto Document; }
yy64: yych = *++YYCURSOR;
switch(yych){
case '\n': goto yy67;
default: goto yy65;
}
yy65:
#line 404
#line 416
{ goto Comment; }
yy66: yych = *++YYCURSOR;
goto yy65;
yy67: yych = *++YYCURSOR;
goto yy63;
}
#line 406
#line 418
}
@ -937,7 +949,7 @@ yy70: yych = *++YYCURSOR;
default: goto yy71;
}
yy71:
#line 447
#line 462
{ YYCURSOR = tok;
goto ScalarEnd;
}
@ -947,13 +959,13 @@ yy72: yych = *++YYCURSOR;
default: goto yy73;
}
yy73:
#line 455
#line 470
{ CAT(str, cap, idx, tok[0]);
goto Scalar2;
}
yy74: yych = *++YYCURSOR;
yy75:
#line 451
#line 466
{ YYCURSOR = tok;
goto ScalarEnd;
}
@ -968,8 +980,9 @@ yy77: yych = *++YYCURSOR;
}
yy78: yych = *++YYCURSOR;
yy79:
#line 424
{ goto Scalar2; }
#line 436
{ CHK_NL(tok+1);
goto Scalar2; }
yy80: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
@ -987,8 +1000,9 @@ yy81: switch(yych){
default: goto yy82;
}
yy82:
#line 426
{ if ( tok + 2 < YYCURSOR )
#line 439
{ CHK_NL(tok+1);
if ( tok + 2 < YYCURSOR )
{
char *count = tok + 2;
int total = strtod( count, NULL );
@ -1006,12 +1020,13 @@ yy82:
}
yy83: yych = *++YYCURSOR;
yy84:
#line 443
{ CAT(str, cap, idx, '\0');
#line 457
{ CHK_NL(tok+1);
CAT(str, cap, idx, '\0');
goto Scalar2;
}
}
#line 459
#line 474
ScalarEnd:
@ -1061,21 +1076,22 @@ yy85:
}
yy87: yych = *++YYCURSOR;
yy88:
#line 494
{ return str; }
#line 509
{ CHK_NL(YYCURSOR);
return str; }
yy89: yych = *++YYCURSOR;
switch(yych){
case '\n': goto yy94;
default: goto yy90;
}
yy90:
#line 500
#line 516
{ CAT(str, cap, idx, tok[0]);
goto Inline;
}
yy91: yych = *++YYCURSOR;
yy92:
#line 496
#line 512
{ YYCURSOR = tok;
return str;
}
@ -1084,7 +1100,7 @@ yy93: yych = *++YYCURSOR;
yy94: yych = *++YYCURSOR;
goto yy88;
}
#line 504
#line 520
}