South Africa 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 3-49 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 2-19, is not expected to bowl again.
"It's a massive blow. Morne is the leader of our attack and he was hot out there," said batsman Temba Bavuma, whose innings of 71 helped South Africa to declare on 6-247 in mid-afternoon.
Bangladesh wicketkeeper Liton Das, who took a remarkable catch to dismiss Bavuma, anticipating a lap sweep by the batsman and moving sharply to his left to hold the ball in his left hand at close range, said he expected left-arm spinner Keshav Maharaj to be the main threat to Bangladesh's hopes of saving the game.
"The South African bowlers did a very good job but the pitch is slow so the challenge will be Maharaj. It's also a fifth-day wicket," said Das.
Morkel's sensational start could have been even better. He was denied a third wicket because of a no-ball.
Bowling around the wicket, the tall right-armer 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 had top scored with 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.
"We've been working on our disciplines," said Bavuma. "We try to cut out taking wickets with no-balls. It is a bit frustrating. When Morne commits a cardinal sin like that he takes it emotionally.
"Catching as well. Faf is one of the best catchers. As long as we do the hard yards at nets we are not cheating ourselves. We have to brush it off."
Du Plessis (81) and Bavuma set up South Africa's second-innings declaration on 6-247 with a fourth-wicket partnership of 142 off 172 balls.
Part-time left-arm spinner Mominul claimed a career-best 3-27 as South Africa chased quick runs.
He had taken only four wickets in 23 previous Tests.
By contrast, Mehedy 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.