Young leg-spinner Jubair Hossain grabbed a five-wicket haul in only his third Test to hand Bangladesh the advantage in the third and final Test against Zimbabwe in Chittagong on Friday.
The 19-year-old finished with 5-96 as Bangladesh, hoping to sweep the series 3-0, dismissed Zimbabwe for 374 runs on the third day to gain a 129-run lead.
The hosts extended the overall lead to 152 runs after reaching 23-0 in their second knock by stumps.
Elton Chigumbura (88), Sikandar Raza (82), Hamilton Masakadza (81) and Regis Chakabva (65) settled in for Zimbabwe, but all three failed to convert the starts into centuries.
When the tourists resumed at 113-1 in reply to Bangladesh's 503, the overnight pair of Raza and Masakadza put on 160 runs, Zimbabwe's highest partnership for the second wicket. It surpassed the 135 by Mark Dekker and Alastair Campbell against Pakistan in 1993.
Seamer Shafiul Islam trapped Masakadza leg-before and, three overs later, Jubair put Zimbabwe on the back foot with the wickets of skipper Brendan Taylor and Raza in the space of three balls.
Zimbabwe, who went to lunch at 200-4, lost Craig Ervine's (14) soon after resumption, but Chigumbura and Chakabva added 113 runs for the sixth wicket to help their team avoid the follow-on.
Jubair dismissed Chigumbura through a catch by Mohammad Mahmudullah in the slips and completed his five-wicket haul with the wicket of last man Natsai M'shangwe.
Bangladesh won the first two Tests in Dhaka and Khulna. The series between the two lowest-ranked teams will be followed by five one-day internationals.