|
|
Le 01/03/2016 11:03, clipka a écrit :
> Am 01.03.2016 um 07:20 schrieb Anthony D. Baye:
>
>> Rebuilt using the latest master. Bug's still there.
>> remove the closing paren at line 180 and try rendering. It gives me a segfault.
>
> The Windows version is well-behaved:
>
> Parse Error: Expected 'string', cylinder found instead
>
> Did I ever mention that I hate it when the Windows version fails to
> exhibit the same bugs as the Unix version?
>
what is line 180 ?
from copy -paste of message, I go to
#local header = ply_header("ascii", 1.0, "Anthony D. Baye", "A twisted ed
hexagonal column", pC)
I presume text get folded and actually the line 180 is:
#write(pCloudFile, vstr(3, DStore[P], " ",0,6), "\r\n")
The segfault is due to a recursive parsing.... consumming 16321 function calls before
giving the problem.
(gdb) where
#0 __GI_____strtod_l_internal (nptr=nptr@entry=0x7f1dfedff3b0 "3",
endptr=endptr@entry=0x7f1dfedff5e8, group=group@entry=0, loc=0x7f1e06a5c500
<_nl_global_locale>) at strtod_l.c:498
#1 0x00007f1e066d2b30 in __GI___strtod_internal (nptr=nptr@entry=0x7f1dfedff3b0 "3",
endptr=endptr@entry=0x7f1dfedff5e8, group=group@entry=0) at strtod.c:54
#2 0x00007f1e066f2fe8 in _IO_vfscanf_internal (s=s@entry=0x7f1dfedff7a0,
format=format@entry=0x6f33a7 "%lf", argptr=argptr@entry=0x7f1dfedff8c8,
errp=errp@entry=0x0) at vfscanf.c:2326
#3 0x00007f1e067085e7 in _IO_vsscanf (string=0x7f1df000535c "3", format=0x6f33a7
"%lf", args=args@entry=0x7f1dfedff8c8) at iovsscanf.c:44
#4 0x00007f1e06702d17 in __sscanf (s=<optimized out>, format=format@entry=0x6f33a7
"%lf") at sscanf.c:32
#5 0x000000000065addc in pov::Parser::Read_Float (this=this@entry=0x7f1df0004b80) at
parser/parser_tokenizer.cpp:1237
#6 0x000000000065d6bc in pov::Parser::Get_Token (this=this@entry=0x7f1df0004b80) at
parser/parser_tokenizer.cpp:570
#7 0x000000000064a29f in pov::Parser::Parse_Num_Factor
(this=this@entry=0x7f1df0004b80, Express=..., Terms=Terms@entry=0x7f1dfedffe3c) at
parser/parser_expressions.cpp:677
#8 0x000000000064c568 in pov::Parser::Parse_Num_Term (this=this@entry=0x7f1df0004b80,
Express=..., Terms=Terms@entry=0x7f1dfedffe3c) at parser/parser_expressions.cpp:1590
#9 0x000000000064cab8 in pov::Parser::Parse_Rel_Factor (this=0x7f1df0004b80,
Express=..., Terms=0x7f1dfedffe3c) at parser/parser_expressions.cpp:1663
#10 0x000000000064dec3 in pov::Parser::Parse_Float (this=this@entry=0x7f1df0004b80) at
parser/parser_expressions.cpp:2049
#11 0x0000000000665996 in pov::Parser::Parse_VStr (this=this@entry=0x7f1df0004b80,
pathname=<optimized out>) at parser/parser_strings.cpp:311
#12 0x000000000066552d in pov::Parser::Parse_String (this=this@entry=0x7f1df0004b80,
pathname=pathname@entry=false, require=require@entry=true) at
parser/parser_strings.cpp:154
#13 0x0000000000665855 in pov::Parser::Parse_C_String (this=this@entry=0x7f1df0004b80,
pathname=pathname@entry=false) at parser/parser_strings.cpp:110
#14 0x0000000000660fe9 in pov::Parser::Parse_Write (this=this@entry=0x7f1df0004b80) at
parser/parser_tokenizer.cpp:3816
#15 0x00000000006626ac in pov::Parser::Parse_Directive
(this=this@entry=0x7f1df0004b80, After_Hash=After_Hash@entry=1) at
parser/parser_tokenizer.cpp:2415
#16 0x000000000065db3d in pov::Parser::Get_Token (this=this@entry=0x7f1df0004b80) at
parser/parser_tokenizer.cpp:451
#17 0x0000000000660ef0 in pov::Parser::Parse_Write (this=this@entry=0x7f1df0004b80) at
parser/parser_tokenizer.cpp:3753
#18 0x00000000006626ac in pov::Parser::Parse_Directive
(this=this@entry=0x7f1df0004b80, After_Hash=After_Hash@entry=1) at
parser/parser_tokenizer.cpp:2415
#19 0x000000000065db3d in pov::Parser::Get_Token (this=this@entry=0x7f1df0004b80) at
parser/parser_tokenizer.cpp:451
#20 0x0000000000660ef0 in pov::Parser::Parse_Write (this=this@entry=0x7f1df0004b80) at
parser/parser_tokenizer.cpp:3753
#21 0x00000000006626ac in pov::Parser::Parse_Directive
(this=this@entry=0x7f1df0004b80, After_Hash=After_Hash@entry=1) at
parser/parser_tokenizer.cpp:2415
#22 0x000000000065db3d in pov::Parser::Get_Token (this=this@entry=0x7f1df0004b80) at
parser/parser_tokenizer.cpp:451
#23 0x0000000000660ef0 in pov::Parser::Parse_Write (this=this@entry=0x7f1df0004b80) at
parser/parser_tokenizer.cpp:3753
#24 0x00000000006626ac in pov::Parser::Parse_Directive
(this=this@entry=0x7f1df0004b80, After_Hash=After_Hash@entry=1) at
parser/parser_tokenizer.cpp:2415
#25 0x000000000065db3d in pov::Parser::Get_Token (this=this@entry=0x7f1df0004b80) at
parser/parser_tokenizer.cpp:451
#26 0x0000000000660ef0 in pov::Parser::Parse_Write (this=this@entry=0x7f1df0004b80) at
parser/parser_tokenizer.cpp:3753
....
....
#16307 0x0000000000660ef0 in pov::Parser::Parse_Write (this=this@entry=0x7f1df0004b80)
at parser/parser_tokenizer.cpp:3753
#16308 0x00000000006626ac in pov::Parser::Parse_Directive
(this=this@entry=0x7f1df0004b80, After_Hash=After_Hash@entry=1) at
parser/parser_tokenizer.cpp:2415
#16309 0x000000000065db3d in pov::Parser::Get_Token (this=this@entry=0x7f1df0004b80)
at parser/parser_tokenizer.cpp:451
#16310 0x0000000000660ef0 in pov::Parser::Parse_Write (this=this@entry=0x7f1df0004b80)
at parser/parser_tokenizer.cpp:3753
#16311 0x00000000006626ac in pov::Parser::Parse_Directive
(this=this@entry=0x7f1df0004b80, After_Hash=After_Hash@entry=1) at
parser/parser_tokenizer.cpp:2415
#16312 0x000000000065db3d in pov::Parser::Get_Token (this=this@entry=0x7f1df0004b80)
at parser/parser_tokenizer.cpp:451
#16313 0x0000000000660ef0 in pov::Parser::Parse_Write (this=this@entry=0x7f1df0004b80)
at parser/parser_tokenizer.cpp:3753
#16314 0x00000000006626ac in pov::Parser::Parse_Directive
(this=this@entry=0x7f1df0004b80, After_Hash=After_Hash@entry=1) at
parser/parser_tokenizer.cpp:2415
#16315 0x000000000065db3d in pov::Parser::Get_Token (this=this@entry=0x7f1df0004b80)
at parser/parser_tokenizer.cpp:451
#16316 0x0000000000557fd8 in pov::Parser::Parse_Frame (this=0x7f1df0004b80) at
parser/parser.cpp:6728
#16317 0x0000000000558b64 in pov::Parser::Run (this=0x7f1df0004b80) at
parser/parser.cpp:210
#16318 0x00000000005875df in pov::Task::TaskThread (this=0x7f1df0004b80,
completion=...) at backend/support/task.cpp:169
#16319 0x00007f1e0751a801 in thread_proxy () from
/usr/local/lib/libboost_thread.so.1.58.0
#16320 0x00007f1e0824a6aa in start_thread (arg=0x7f1dfeffe700) at pthread_create.c:333
#16321 0x00007f1e0679de9d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109
The heap is exhausted, and I would say that due to compilation option there is no
check to expand it further at each function call, hence the problem.
pC: 38520
layers: 321
We only need to have a bigger heap (38520 iterations... stacked 16300 call so far, for
about 8150 write, a x6 or x5 would allow to survive too) I guess that's what happening
for Windows, could be interesting to monitor its heap size as parser progress.
NAAAAHHH, Parse_Write should use a pattern already use elsewhere, no more than one
recursion... or even none at all.
ab-using code like
#write( .... #write( ...
is a call for lightning from Zeus and the opening of the multidimensional portal for
Chtulhu. The first to kill the abuser wins. In case of tie, Poseidon can make the life
of perpetrator an hell to which the saga of Ulysse would look like a pleasant walk on
Sunday afternoon.
Post a reply to this message
|
|