Contract-Driven Data Structure Repair : A Novel Approach For Error Recovery