Quinton de Kock scored an unbeaten 85 to help South Africa reach 8-421 at lunch on the second day of the fourth and final Test against England in Pretoria.
Dane Piedt was not out on 10 as South Africa added 92 runs to their overnight tally of 5-329 at Centurion Park on Saturday.
The home side are seeking to build a sizeable first-innings total and push for an elusive victory after more than 12 months without any Test success.
De Kock, who missed the previous Test after hurting his knee tripping over while walking his dogs, displayed an array of aggressive strokes but was given two lives as England’s fielding woes continued.
Ben Stokes attempted a difficult catch in the gully off James Anderson in the second over of the day when de Kock had yet to add to his overnight tally of 25.
A mix-up between Jonny Bairstow and captain Alastair Cook at first slip offered de Kock another life on 80, just before the lunch break.
He got a thick edge to a delivery from Chris Woakes that flew between wicketkeeper and first slip with neither making any effort to catch the ball.
England had looked likely to wrap up the South African innings swiftly as they took two wickets in the first five overs under sunny skies.
Temba Bavuma added only three runs to his overnight tally of 32 before edging Stuart Broad and Kagiso Rabada followed almost immediately, out first ball as he was trapped leg before to give Anderson his first wicket of the match.
De Kock and Kyle Abbott added 50 runs for the eighth wicket before the fast bowler fell lbw to Stokes for 16, including an elegant lofted six off Moeen Ali.
England have already clinched the four-match series 2-0 after wins in Durban and Johannesburg. The second Test in Cape Town was drawn.