Walsall 1 Doncaster Rovers 1
The visitors were on top from the start and, in the third minute, an overhead kick from Neil Roberts was tipped on to the bar by Joe Murphy, who was much the busier of the two goalkeepers throughout.
Rovers took the lead in the 11th minute, thanks to some poor defending by Walsall.
Murphy put Mark Wright in trouble with a poor throw out and, with Paul McShane trying desperately to clear, Roberts got in a cross that Julian Bennett could only deflect into his own net.
The visitors continued to pressurise, but Walsall equalised with a goal out of the blue after 21 minutes.
John Doolan cleared off the line from Bennett's header, but the ball fell to Michael Standing to hit home an unstoppable 20-yard shot.
Even that failed to spur Walsall into action and in the 35th minute, Murphy had to make a low save from Roberts.
A minute later a shot from Simon Johnson hit the bar, bounced down on to the line and was scrambled clear.
Rovers continued to be the better side in the second half, but a goal could have come from anywhere because both defences looked suspect.
Murphy tipped over a free-kick from a Dave Mulligan and Roberts missed a great headed chance from a cross by Paul Green.
In the 62nd minute Roberts had two successive goal-bound shots blocked, but at the other end Walsall substitute Matt Fryatt forced a rare save from Andy Warrington.
Murphy was forced into action again soon afterwards, tipping over from Green's 25-yard effort and then saving from Ricky Ravenhill.
Walsall pressed towards the close, but Joe Broad missed after being played in by Standing and the latter shot over from 20 yards moments later.
In added time Warrington and Bennett collided in the Doncaster box and both had to be substituted
The final chance fell to Walsall but no-one could get on the end of Fryatt's cross.