
jon at endpoint
Aug 22, 2009, 6:09 PM
Post #1 of 1
(465 views)
Permalink
|
|
Cautious eval error handling
|
|
Interchange users, A few months ago I had an adventure tracking down a very obscure bug in Interchange that was caused by a check for $@ too long after an eval was called. The biggest reason it was hard to find was that even a logging command had an eval that reset $@, making later checks fail. The fix was here: http://git.icdevgroup.org/?p=interchange.git;a=commitdiff;h=9f9d7c578da699776722641ec3c1edd4b51f3a99 That reinforces that it's good hygiene to only check $@ immediately after the routine that sets it. And any routine expected to set it should guarantee that it's cleared when there's no error. I decided it would be good to go through the whole Interchange codebase looking for any potential problems, and clean them up to save troubleshooting and unexpected corner case failures later. I'm only about halfway through and am committing most changes separately so that they're small and have per-case explanations. I've pushed the work so far to a new GitHub branch: http://github.com/jonjensen/interchange/commits/cautious-eval-errors/ Many of the changes should make no difference at all right now, but could prevent later problems and/or clarify the intent of the code. Others change the way code checks for errors, trying to avoid $@. So far the only functions I think are valid for setting $@ are eval, Safe's reval, and Interchange's string_to_ref. When I come across others I'm trying to have Interchange use the return code & whatever API exists rather than rely on $@. I'd appreciate any feedback or offers to help review & test, if any of you is interested. Thanks, Jon -- Jon Jensen End Point Corporation http://www.endpoint.com/ _______________________________________________ interchange-users mailing list interchange-users [at] icdevgroup http://www.icdevgroup.org/mailman/listinfo/interchange-users
|