pengyou
15th January 2007 01:30 UTC
404 error with Inetc corrupts the stack when /END is used
I'm storing some registers on the stack and then using the Inetc plugin (in NSISdl mode) to download a file using an Inetc::get command which has /END at the end.
If the download is successful the plugin leaves one value on the stack (OK) but if the file is not found then the plugin leaves two values on the stack (on my Win98SE system):
File not found (404)
/END
My code checks the Inetc result by popping the result from the stack. Since my code did not expect this extra value (/END) some register corruption occurred when my code used the stack to restore the registers.
As a workaround I'm checking to see if /END is left on the stack when Inetc does not return "OK".
Takhir
15th January 2007 14:03 UTC
Yes, plug-in stops reading stack on error.. I'll add patch soon. Thanks, pengyou. May multi-download mode is excessive (not required in real life)? This case /end not required and it is easy to fix situation..
pengyou
15th January 2007 14:45 UTC
Thanks for the quick response.
Although my installer uses Inetc to download several files it only downloads one file at a time (I've never used the multi-download mode).
pengyou
18th January 2007 12:18 UTC
The "1 January 2007" version of Inetc was leaving /END on the stack when it detected an error:
File Not Found (404)
/END
data-x
data-y
data-z
The "17 January 2007" version of the Inetc plugin leaves the stack with just one value on it if an error is detected:
File Not Found (404)
This means my installer is unable to restore the data-x, data-y and data-z values.
Takhir
18th January 2007 12:56 UTC
Sorry. Updated. Good news - popstring not crashes on null pointer ;)
pengyou
18th January 2007 13:43 UTC
The new "18 January 2007" version of Inetc solves my problem.
Thanks for fixing it so quickly!