South Africa captain Dean Elgar scored an unbeaten 46 to give his team a chance of victory over India as they chased a target of 240 to win the second Test at the Wanderers.
South Africa need 122 more runs to win, and level the three-match series, after closing on 118-2 at the end of the third day's play on Wednesday.
Elgar lived up to his reputation as a dogged, street-fighting batsman as he held the Indian bowling attack at bay, scoring his runs patiently off 121 balls.
He came in for a torrid time, frequently hit on the body by short balls as the tourists searched for a breakthrough.
Elgar featured in a 47-run partnership with Aiden Markram for the first wicket and 46 with Keegan Petersen for the second to put his side in a strong position, with two days’ play left.
Markram was out lbw to Shardul Thakur for 31 while the diminutive Petersen scored 28 before Ravinchandran Ashwin trapped him lbw.
Rassie van der Dussen, who has struggled in the series, was 11 not out at stumps.
South Africa had hoped to bowl India out cheaper in their second innings but eventually dismissed them for 266 some 30 minutes before tea.
The 240-run target looked a daunting task on a low-scoring wicket, increasingly favouring the seamers.
India’s batsmen had earlier defied the conditions, picking up where they left off overnight with a free scoring display in the first hour on Wednesday as they moved the score from 85-2 to 151-2.
In the process, both Cheteshwar Pujara and Ajinkya Rahane reached 50 and put together a 111-run partnership for the third wicket as they dominated the home bowling.
But the runs dried up suddenly with three quick wickets for Kagiso Rabada before lunch.
Rahane went first for 58 before Pujara was trapped lbw for 53 and Rishabh Punt went for a duck after a wild and injudicious early slog at the ball.
Thakur, who had taken seven wickets in South Africa’s first innings, picked up the Indian run rate again after lunch, scoring 28 runs off 24 balls before being caught in the deep off Marco Jansen.
An unbeaten 40 for Hanuma Vihari, in the side in place of injured skipper Virat Kohli, added to India’s sizeable second innings score, as did 33 extras.
India scored 202 in their first innings to which South Africa replied with 229.
India won the last week’s first test in Pretoria by 113 runs as they search for a first series win in South Africa.
PICS: Elgar keeps India at bay; 2nd Test evenly poised
This South Africa umpire in 2nd Test has India roots
Sourav Ganguly's daughter tests COVID positive
Rahul rises in Test rankings after Centurion show
Coach Lad reveals the secrets of Shardul's success