The Persistence of Vision Raytracer (POV-Ray).
This is the legacy Bug Tracking System for the POV-Ray project. Bugs listed here are being migrated to our github issue tracker. Please refer to that for new reports or updates to existing ones on this system.
Attached to Project: POV-Ray
Opened by Christoph Lipka - 2009-08-25
Last edited by Chris Cason - 2010-03-18
Opened by Christoph Lipka - 2009-08-25
Last edited by Chris Cason - 2010-03-18
FS#51 - POV-Ray crashes hard on missing parenthesis
The following (bogus) SDL code causes POV-Ray 3.7 beta to crash hard with an access violation:
#include "fubar.inc" Bar(42) #macro FooBar() #end
//fubar.inc #macro Foo(Fnord) #end #macro Bar(Ignord) Foo(23 #end
On beta 34, from Source, linux amd64.
No crash but a really strange filename reported:
The filename is assumed to be a lost pointer here.
On Version beta 34 (win x64)... with file "foobar.pov" and "foobar.inc"
Cannot find file "foobar.inc", even after trying to append file extension.
I think this is similar to the error with the .tiff extension, the exact
filename provided should be searched for first before any attempts to
guess the file extension.
I still do get hard crashes with POV-Ray 3.7.0.beta.34 official binary, running Windows XP x64 on an Intel i7 QuadCore machine. (Though I just experimented a bit again, and once saw a clean "Expected ')', # found instead" message, but can't reproduce that.)
The error message Tim is getting makes no sense at all: Including "FOO.inc" from "FOO.pov" is nothing uncommon, and usually works perfectly fine; the .tiff extension problem also pertains to files with a >3 character file extension. So I guess that in Tim's particular case it was indeed a typo or some such - or another random weird result of POV-Ray going all crackpot on this particular combo of macros, includes and that missing closing parenthesis.
I just tested to find that POV-Ray 3.6.2 exhibits hard crashes as well on this particular combo.
The cause of this bug was a pointer to the include file input stream being retained in the token structure after the stream was closed.
When the missing parenthesis was detected, the error output code would de-reference the pointer, which would either cause an invalid memory access or otherwise return junk (if that portion of the heap was still valid).