Cape Town - Suranga Lakmal and part-time spinner Dhananjaya de Silva shared seven wickets to cause a major Proteas second innings collapse and give Sri Lanka a wonderful chance on Friday of winning the Test Series at St. George's Park.
STUMPS: Proteas v Sri Lanka, 2nd Test - Day 2
Kagiso Rabada and Duanne Olivier had earlier also shared seven wickets to give the Proteas a lead of 68 runs on the first innings but, as they have done throughout the series, Sri Lanka continued to match the home side punch for punch to dismiss the Proteas for 128 runs and set a victory target of 197.
Considering this requires the second highest total of the match the outcome could still go either way with Sri Lanka having reached by the close of play on 60/2, needing a further 137 runs for victory.
In what has become an all too familiar Proteas story this summer they lost their last six wickets for just 38 runs.
Lakmal led the way with his figures of 4/39 but in a way De Silva made the more important contribution having to take the role of frontline spinner following the unfortunate injury that has ruled Lasith Embuldeniya out of the majority of the match.
De Silva started the collapse when he had Hashim Amla caught at slip and might have had Faf du Plessis even earlier to an edge that found the gap between wicketkeeper and slip.
It was just as well for the Proteas that their captain survived as he went on to finish unbeaten on 50 (70 balls, 7 fours) as the last six South African batsmen made 18 runs between them.
It meant that no South African batsmen has managed an aggregate of 100 runs in the match and Sri Lanka will probably need one of their top order to get to a match aggregate of 100 if they are to finish the job.
In all 18 wickets fell in the day's play while 282 runs were scored.
If Sri Lanka succeed, they will become the first Asian team to win a Test series in South Africa.
Play on Day 3 starts at 10:00.
Scores in brief:
Toss: South Africa
South Africa 222 (De Kock 86, Fernando 3/62), 128 (Du Plessis 50*, Lakmal 4/39)
Sri Lanka 154 (Niroshan Dickwella 42, Rabada 4/38),
Sri Lanka need 137 runs to win