It seems to be not that unusual that out of date plugins in the installed area result in system crashes.

Now I've made a fairly simple change (not yet commited) that checks what the svn version was of the compiled plugin against that of the server, and if they don't match, it doesn't load the plugin.

The nice bit here is that for old plugins, they will lack this symbol, and also will not get loaded. As that is another potential problem - a plugin that used to exist (and thus was installed), but has been renamed, is no longer active, etc.

The one thing I'm not sure of is if any plugins exist from outside the source tree, in which case them having the right svn version would be an issue.

I've also thought about adding in some other checks - sizeof(object) as when the plugin was compiled vs the server, and perhaps sizeof of player, map, etc. But these would seem to be much more developer scenarios - dev has made changes, but not done a commit, so svn number is unchanged. In those cases, the dev should hopefully be aware of what they have done. And the problem is that simple size checks may not be all that foolproof - if for example, I remove one field from the middle of the object structure, but add a new one to the end, the sizeof(object) may be the same, but the fact that the positioning of a bunch of interim fields has changed will result bad behavior.

I'll commit this change in the next day or two, unless I hear of some reason not to - the plus side is that it is a pretty trivial change, and removing/disabling the logic from the plugin loader would be pretty easy if there are issues.

_______________________________________________
crossfire mailing list
crossfire@metalforge.org
http://mailman.metalforge.org/mailman/listinfo/crossfire

Reply via email to