Hi Christoph,

I've encountered a problem with our handling of the stack. I must admit
I'm very surprised that this bug hasn't surfaced before: When doing
multiple sends, each send must not frob the stack of the previous one.
HBoG2 depends on this. It tries to open files of the format hoylesol.%03d
and stores the formatted name in temp variables. The address goes to the
name selector, and, assuming that the temp variables are still there,
calls FOpen(). The problem is that they aren't in FreeSCI.

I suppose gamefile.sh is the only class that depends on this behavior -
QfG1 and friends likely have similar problems in the import/export
screens.

The funny thing about this is that FOpen() does not fail even though it's
called with a bogus name. Absolutely zero error checking in the file
parsing code eventually leads to a NodeValue(0) call. Thus, I initially
blamed the list code. </expletive>

Lars


-- Attached file included as plaintext by Listar --
-- File: last_log

 Calling solitare::play()
pc=2560 acc=0000 o=052e fp=13b4 sp=13b4
prev=0 sbase=13b2 globls=0da8 &restmod=0
Step #0
2560: [W] selfID


  #0: Execute hoylesol.000:read
  #1: Execute hoylesol.000::read



Attempt to suspend invalid handle 0000
Break on hoylesol.000::read
pc=96b0 acc=96d8 o=96d8 fp=140a sp=140a
prev=12 sbase=13b2 globls=0da8 &restmod=0
Step #106633
96B0: [B] link 19
Call stack (current base: 0):
 0:[ffffffff]  solitare::play()
    obj@052e pc=2599 sp=13b4 fp=13b4
 1:[0]  solitare::doit()
    obj@052e pc=0521 sp=13b8 fp=13b8
 2:[1]  Game::doit()
    obj@052e pc=2607 sp=13bc fp=13bc
 3:[2]  solitare::newRoom(0001)
    obj@052e pc=2659 sp=13ce fp=13c2
 4:[3]  solitare::setCursor(03e7, 0001)
    obj@052e pc=26b6 sp=13dc fp=13dc
 5:[3]  solitare::startRoom(0001)
    obj@052e pc=2697 sp=13dc fp=13dc
 6:[5]  rm1::init()
    obj@46bc pc=4066 sp=13ea fp=13e0
 7:[6]  rm1::<call[be]?>()
    obj@46bc pc=927d sp=13f6 fp=13ec
 8:[7]  hoylesol.000::read(1096, 0019)
    obj@96d8 pc=2f4f sp=140a fp=140a
 9:[7]  hoylesol.000::open(0001)
    obj@96d8 pc=2ede sp=140a fp=140a
 a:[7]  hoylesol.000::init(0076)
    obj@96d8 pc=96b0 sp=140a fp=140a

Object hoylesol.000
Species=002d, Superclass=002d
Local variables @ 0x0000
Variable selectors:
  species[0000] = 002d
  superClass[0001] = 002d
  -info-[0002] = 0000
  name[0017] = 9710
  handle[002c] = 0000
Method selectors:
  init[0057] at 96b0
  doit[003c] at 96c4


pc=96b2 acc=96d8 o=96d8 fp=140a sp=143c
prev=12 sbase=13b2 globls=0da8 &restmod=0
Step #106634
96B2: [B] pushi 04

pc=96b4 acc=96d8 o=96d8 fp=140a sp=143e
prev=12 sbase=13b2 globls=0da8 &restmod=0
Step #106635
96B4: [B] lea 04 00

pc=96b7 acc=140a o=96d8 fp=140a sp=143e
prev=12 sbase=13b2 globls=0da8 &restmod=0
Step #106636
96B7: [W] push

pc=96b8 acc=140a o=96d8 fp=140a sp=1440
prev=12 sbase=13b2 globls=0da8 &restmod=0
Step #106637
96B8: [W] pushi 013c

pc=96bb acc=140a o=96d8 fp=140a sp=1442
prev=12 sbase=13b2 globls=0da8 &restmod=0
Step #106638
96BB: [W] push1

pc=96bc acc=140a o=96d8 fp=140a sp=1444
prev=12 sbase=13b2 globls=0da8 &restmod=0
Step #106639
96BC: [B] lsp 01

pc=96be acc=140a o=96d8 fp=140a sp=1446
prev=12 sbase=13b2 globls=0da8 &restmod=0
Step #106640
96BE: [B] callk Format[4c] 08
 Kernel params: (140a, 013c, 0001, 0076)

pc=96c1 acc=140a o=96d8 fp=140a sp=143c
prev=12 sbase=13b2 globls=0da8 &restmod=0
Step #106641
96C1: [B] aTop 06       (name)

pc=96c3 acc=140a o=96d8 fp=140a sp=143c
prev=12 sbase=13b2 globls=0da8 &restmod=0
Step #106642
96C3: [W] ret

pc=2ede acc=140a o=96d8 fp=140a sp=140a
prev=12 sbase=13b2 globls=0da8 &restmod=0
Step #106643
2EDE: [B] lsp 00

 Game::play() finished.
Freeing miscellaneous data...
Freeing state-dependant data
Freeing vocabulary
Freeing graphics


Reply via email to