This project is read-only.

Unexpected page errors

Feb 13, 2011 at 8:37 AM

Hello, 
I'm using the latest sdk, and I'm getting unexpected page errors on some of the psts.

Here are the cases:

- occurs when trying to simply load the pst

pstsdk.definition.exception.PstSdkException: Error creating object from node ---> System.Runtime.InteropServices.SEHException: External component has thrown an exception.   at _CxxThrowException(Void* , _s__ThrowInfo* )   at pstsdk.database_impl<unsigned __int64>.read_page_data(database_impl<unsigned __int64>* , vector<unsigned char\,std::allocator<unsigned char> >* , page_info* pi) in pstsdk\pstsdk\ndb\database.h:line 305   at pstsdk.database_impl<unsigned __int64>.read_nbt_page(database_impl<unsigned __int64>* , shared_ptr<pstsdk::bt_page<unsigned long\,pstsdk::node_info> >* , page_info* pi) in pstsdk\pstsdk\ndb\database.h:line 515   at pstsdk.database_impl<unsigned __int64>.read_nbt_root(database_impl<unsigned __int64>* , shared_ptr<pstsdk::bt_page<unsigned long\,pstsdk::node_info> >* ) in pstsdk\pstsdk\ndb\database.h:line 336   at pstsdk.database_impl<unsigned __int64>.lookup_node_info(database_impl<unsigned __int64>* , node_info* , UInt32 nid) in pstsdk\pstsdk\ndb\database.h:line 541   at pstsdk.database_impl<unsigned __int64>.lookup_node(database_impl<unsigned __int64>* , node* , UInt32 nid) in pstsdk\pstsdk\ndb\database.h:line 79

- occurs when trying to iterate the folders

pstsdk.definition.exception.PstSdkException: Error creating object from subnode ---> pstsdk.definition.exception.PstSdkException: Error constructing NodeIdCollection instance. ---> pstsdk.definition.exception.PstSdkException: Error constructing NodeIdEnumerator instance. ---> System.Runtime.InteropServices.SEHException: External component has thrown an exception.   at _CxxThrowException(Void* , _s__ThrowInfo* )   at pstsdk.database_impl<unsigned __int64>.read_page_data(database_impl<unsigned __int64>* , vector<unsigned char\,std::allocator<unsigned char> >* , page_info* pi) in pstsdk\pstsdk\ndb\database.h:line 305   at pstsdk.database_impl<unsigned __int64>.read_nbt_page(database_impl<unsigned __int64>* , shared_ptr<pstsdk::bt_page<unsigned long\,pstsdk::node_info> >* , page_info* pi) in pstsdk\pstsdk\ndb\database.h:line 515   at pstsdk.bt_nonleaf_page<unsigned long,pstsdk::node_info>.get_child(bt_nonleaf_page<unsigned long\,pstsdk::node_info>* , UInt32 pos) in pstsdk\pstsdk\ndb\page.h:line 222   at pstsdk.bt_nonleaf_page<unsigned long,pstsdk::node_info>.get_child(bt_nonleaf_page<unsigned long\,pstsdk::node_info>* , UInt32 )   at pstsdk.btree_node_nonleaf<unsigned long,pstsdk::node_info>.next(btree_node_nonleaf<unsigned long\,pstsdk::node_info>* , btree_iter_impl<unsigned long\,pstsdk::node_info>* iter) in pstsdk\pstsdk\util\btree.h:line 399   at pstsdk.btree_node_leaf<unsigned long,pstsdk::node_info>.next(btree_node_leaf<unsigned long\,pstsdk::node_info>* , btree_iter_impl<unsigned long\,pstsdk::node_info>* iter) in pstsdk\pstsdk\util\btree.h:line 321   at pstsdk.const_btree_node_iter<unsigned long,pstsdk::node_info>.increment(const_btree_node_iter<unsigned long\,pstsdk::node_info>* ) in pstsdk\pstsdk\util\btree.h:line 243   at boost.filter_iterator<pstsdk::is_nid_type<2>,pstsdk::const_btree_node_iter<unsigned long,pstsdk::node_info> >.satisfy_predicate(filter_iterator<pstsdk::is_nid_type<2>\,pstsdk::const_btree_node_iter<unsigned long\,pstsdk::node_info> >* ) in boost\iterator\filter_iterator.hpp:line 100   at boost.filter_iterator<pstsdk::is_nid_type<2>,pstsdk::const_btree_node_iter<unsigned long,pstsdk::node_info> >.increment(filter_iterator<pstsdk::is_nid_type<2>\,pstsdk::const_btree_node_iter<unsigned long\,pstsdk::node_info> >* ) in boost\iterator\filter_iterator.hpp:line 90   at boost.iterator_facade<boost::filter_iterator<pstsdk::is_nid_type<2>,pstsdk::const_btree_node_iter<unsigned long,pstsdk::node_info> >,pstsdk::node_info,boost::bidirectional_traversal_tag,pstsdk::node_info const &,int>.++(iterator_facade<boost::filter_iterator<pstsdk::is_nid_type<2>\,pstsdk::const_btree_node_iter<unsigned long\,pstsdk::node_info> >\,pstsdk::node_info\,boost::bidirectional_traversal_tag\,pstsdk::node_info const \&\,int>* ) in boost\iterator\iterator_facade.hpp:line 664   at boost.operator++<class boost::filter_iterator<struct pstsdk::is_nid_type<2>,class pstsdk::const_btree_node_iter<unsigned long,struct pstsdk::node_info> >,struct pstsdk::node_info,struct boost::bidirectional_traversal_tag,struct pstsdk::node_info const &,int>(filter_iterator<pstsdk::is_nid_type<2>\,pstsdk::const_btree_node_iter<unsigned long\,pstsdk::node_info> >* , iterator_facade<boost::filter_iterator<pstsdk::is_nid_type<2>\,pstsdk::const_btree_node_iter<unsigned long\,pstsdk::node_info> >\,pstsdk::node_info\,boost::bidirectional_traversal_tag\,pstsdk::node_info const \&\,int>* i, Int32 __unnamed001) in boost\iterator\iterator_facade.hpp:line 732

Those psts can be open in Outlook, and are not corrupted.

Is there somthing I can do?

Thanks,
Sagi.

Feb 13, 2011 at 1:24 PM

UPDATE:

Maybe that will help to answer,
It worked after doing "Compact" to the pst file. but I really want to avoid it. 

Is there a way to ignore and skip the gaps that probably found and removed by the compact action?

 

Feb 13, 2011 at 4:41 PM

Doesn't make a whole lot of sense - compacting a PST file shouldn't affect the data in such a way to make this succeed when it fails before. To really be actionable, I'd probably need a copy of the PST file. A repo which didn't involve .net interop would be great too :)

Feb 25, 2011 at 4:20 PM

That looks like a stack trace from the .NET port we're writing. 

Feel free to bring the discussion and issue over there if that's the case...

 http://pstsdknet.codeplex.com/

 

One of the issues that we face with the .NET version is a need to do some upfront iterations to collect NodeIDs, A corrupt PST might not succeed during such an iteration and may be fixed with a compact or by running the ScanPST tool. 

 

Thanks,

Troy