South African fast bowler Morne Morkel took two wickets for no runs in the first over of Bangladesh's second innings before an injury to the fast bowler and a thunderstorm hit South Africa's hopes of an early win on the fourth day of the first Test on Sunday.
Bangladesh were reeling at 49 for three after being set to make 424 to win when a storm hit Senwes Park during the tea break and no further play was possible.
More showers are possible on the final day on Monday and Morkel, who took two for 19, is not expected to bowl again.
He left the field with a side strain after bowling two balls in his sixth over. He is due to have scans on Monday to establish the extent of the injury.
Morkel's sensational start could have been even better. He was denied a third wicket because of a no-ball.
Morkel, bowling around the wicket, bowled Tamim Iqbal with his fourth ball, a superb delivery which straightened off the pitch and hit the off stump.
Two balls later he won a leg before wicket decision against another left-hander, Mominul Haque, who made top score of 77 in Bangladesh's first innings.
After consulting batting partner Imrul Kayes, Mominul did not seek a television review of umpire Chris Gaffaney's decision but replays showed the ball would have missed the leg stump.
Switching to over the wicket, Morkel uprooted the middle stump of Mushfiqur Rahim, Bangladesh's right-handed captain, with the second delivery of his next over.
But a television check showed the bowler had over-stepped the bowling crease. A no-ball was called and Rahim was reprieved.
It was a world record 14th occasion on which Morkel had been denied a Test wicket because of a no-ball.
South Africa missed another chance when captain Faf du Plessis dropped Kayes at second slip off Kagiso Rabada when the batsman was on six.
Kayes made 32 before he was caught behind off left-arm spinner Keshav Maharaj in what proved to be the last over of the day.
Du Plessis (81) and Temba Bavuma (71) set up South Africa's second innings declaration on 247 for six with a fourth wicket partnership of 142 off 172 balls.
The innings was interrupted for 47 minutes by the first of two thunderstorms.
Part-time left-arm spinner Mominul claimed a career-best three for 27 as South Africa chased quick runs.
He had taken only four wickets in 23 previous Tests.
By contrast, Mehidy Hasan, Bangladesh's only front-line spinner, did not take a wicket and conceded 247 runs in 67 overs during the match -- the third-highest number of runs conceded by a bowler without taking a wicket in a Test match, a list headed by South Africa's Imran Tahir, who leaked 260 runs against Australia in 2012.
Clearly intent on setting up a declaration which would leave his team with plenty of time to bowl out Bangladesh a second time, Du Plessis showed aggressive intent from the start of his innings.
He reached easily the fastest half-century of the match off 55 balls and went on to make 81 off 101 balls.
Bavuma made a slow start and survived a chance on eight when Kayes dropped a fierce square cut at point off Shafiul Islam.
But he lifted his tempo as he and Du Plessis mixed boundaries with good running between the wickets.
Bavuma faced 105 balls before falling to a sensational catch by wicketkeeper Liton Das , who moved sharply to his left as he anticipated a lap sweep by Bavuma and held the ball at close range with his left hand.