Okay: I wrote the string (self.parts['font']) out to a temporary file and diff'd it against the original file, and they are identical. Pygame successfully loads the font from the temporary file, and the font works normally. However I would definitely like to find a less kludgish solution to the problem.
The particular font does not appear to matter, or at least, a wide variety of truetype fonts are affected - I can't load Junius Unicode or Free Serif from a StringIO either, but I can load them from files. It worked about six to eight months ago. Sorry I can't be more specific - I sort of mothballed the project for a while. Sorry I didn't provide a "demonstration program" I will try to keep that in mind in the future. - Bryce On Mon, Nov 23, 2009 at 2:05 PM, Brian Fisher <br...@hamsterrepublic.com> wrote: > Pygame should be supporting a file-like object no problem, so this seems > like it could be a bug. > > Can you be more specific on when in the past it worked, and what happened > between then and when it segfaults now? > > Also, it's not clear from your problem description whether the problem is > that pygame crashes when loading from a file-like object, or if pygame > crashes on a specific set of font data. > > So I would suggest doing a sanity check here by writing the > self.parts['font'] string to a temp file, and trying to load from that, as a > way of being able to determine if the crash is caused by the file-like > object reading, or by some problem with the contents of the file-like > object. > > So something like: > ------------ > class Font(Resource): > .... > def pygame_font(self,size): > file(temp_file_name, "w").write(self.parts['font']) > return pygame.font.Font(temp_file_name, size) > os.unlink(temp_file_name) > ------------ > If that still crashes, then pygame has trouble with that font content, and > then the question would be to figure out what about that font content is > causing problems. If that doesn't crash, then the problem would be with > accessing the content as a file-like object. > > > ... finally, as general advice to all people posting problems - if you can > send a completely self-contained reproducible case, then you are much more > likely to get good help and results faster. As an example in this case, > providing the contents of the self.parts['font'] string in an attached file > with a simple script that tries to load from a StringIO using that file's > contents, would make this easily reproducible and testable by fellow mailing > listers - but without knowing what the contents of the string in question > are, it may actually be practically impossible for anyone else to test > themselves. > > > On Mon, Nov 23, 2009 at 12:38 PM, Bryce Schroeder > <bryce.schroe...@gmail.com> wrote: >> >> (My apologies if this is a double-post. I didn't get a copy of the >> message or see it in the archive, so I'm trying again.) >> >> I have a pygame program that worked in the past on both Linux and >> Windows, but now results in a segfault, at least on Linux. (I can't >> test it on Windows.) >> The segfault occurs in this code: >> >> class Font(Resource): >> .... >> def pygame_font(self,size): >> return pygame.font.Font(StringIO.StringIO(self.parts['font']), >> size) # Segfaults here >> >> >> self.parts['font'] is a string containing a truetype font loaded from >> a file. I have checked that the string contains the file like it is >> supposed too. Any suggestions? > >