Mahmudul Hasan Joy scored Bangladesh's first Test century against South Africa to lead the tourists back into contention in the first Test.

Bad light brought a slightly premature conclusion to proceedings on day three, with South Africa 75 runs ahead having bowled Bangladesh out for 298 and started their second innings 6-0.

But this was a day for the Tigers and opener Mahmudul (137) to reflect fondly on in Durban.

Mahmudul had been their one shining light on day two in only his third Test, unbeaten on 44 at stumps with his team a concerning 98-4 in reply to the Proteas' 367.

Nightwatchman Taskin Ahmed departed in only the third over of Saturday's play, but Mahmudul finally found a team-mate able to stick around in Liton Das and the pair put on 82 for the sixth wicket.

Mahmudul was dropped by Sarel Erwee on 64 and reached 90 before he inadvertently had partner Yasir Ali – the next man in after Liton – ran out.

A landmark century kept Bangladesh moving, though, and their innings only ended when Mahmudul's did, with the 31-year-old not quite able to carry his bat after playing with greater ambition alongside the tail, caught by Simon Harmer at slip.

Marvellous Mahmudul makes history

The previous high score from a Bangladesh batsman against South Africa had been Mominul Haque's 77 in 2017, a mark Mahmudul cleared by some distance.

He survived 326 balls and almost seven and a half hours, scoring 15 fours and a pair of sixes. Six of those boundaries came across two overs after Mehidy Hasan Miraz departed late in the innings.

No first five-fer for Harmer

South Africa remain in control of the Test match, but they allowed Bangladesh to retain some hope by failing to follow up their superb early bowling from the previous day.

Harmer finished Friday with outstanding bowling figures of 4-42 from 20 overs, yet he allowed 61 runs for no wickets from his next 20, improbably unable to claim a first five-fer. At least he had his day two efforts to fall back on; Keshav Maharaj finished on 0-65.