Bangladesh handed South Africa a second successive loss in the Zimbabwe Twenty20 Triangular Series with a three-wicket win in Harare.
The Tigers' spinners stifled their opponents to 129-7 and then squeezed past their total with a ball to spare, keeping alive their hopes of reaching the final.
Ziaur Rahman finished with 27 not out from 26 balls for Bangladesh, including hitting the boundary off the bowling of Chris Morris that sealed victory.
Opener Mohammad Ashraful had earlier smashed a run-a-ball 40, which included six fours, and Mahmudullah weighed in with 28 lower down the order.
Marchant de Lange took 3-25 for the South Africans while fellow seamer Wayne Parnell picked up 2-18 during an economic spell, both his scalps coming in the same over.
However the Proteas paid the price for not giving their bowlers enough runs to work with, as they failed to convince against Bangladesh's attack on a sticky pitch at the Harare Sports Club.
Only Justin Ontong, with 41 off 36 balls, got to grips with the conditions, including putting on a 56-run partnership with Farhaan Behardien (16) after they had come together with the score on 34-3.
Faf du Plessis fell for 13 off Elias Sunny and Mahmudullah removed Colin Ingram for one by claiming a return catch before skipper Hashim Amla (20) was run out.
Bangladesh must now hope for a Zimbabwe win over South Africa on Saturday if they are progress through to Sunday's final.