Top seed David Ferrer survived a scare to reach the semi-finals of the Heineken Open with a 6-3 5-7 6-4 victory over Guillermo Garcia-Lopez.