I have discovered and fixed a problem with the MI_TAB part of OGR.
The problem occurs when OGR is used in a threaded environment (such as the MapGuide? Server).
In mitab_datfile.cpp the functions ReadCharField? and ReadDateField? both use a static allocated buffer to return the results. This causes memory violations when one thread is reading the buffer and another is writing it.
The fix is simple, just add a member variable that can act as buffer, and remove the statically allocated buffers. This gives a slight overhead in memory consumption, but enables threading.
The attached DIFF file can be used to patch the gdal/ogr version found in the MapGudie? Server svn trunk (don't now the exact version used there).