AMHERST, N.Y. (AP) — It's been so long, senior guard CJ Massinburg can't remember the last time Buffalo lost at home.
"No," he said, putting his hand to his forehead.
Massinburg and the senior-laden Bulls would prefer to keep it that way after rallying No. 21 Buffalo over Akron 77-64 on Tuesday night for its 25th straight home victory.
Massinburg had 23 points, 10 rebounds and six assists, and Nick Perkins scored 25 points in extending a home winning streak that dates to a 73-62 loss to St. Bonaventure on Dec. 2, 2017.
"It's a tough, hard-fought win. It's a game these two seniors didn't want to lose," coach Nate Oats said. "They haven't lost yet at home in their senior year. And I think they showed they didn't want to lose in the second half."
After trailing by five during the second half, Buffalo (25-3, 13-2 Mid-American Conference) pulled away by outscoring the Zips 14-2 over the final four minutes in a game that featured 12 lead changes.
"We're seniors and we want to leave a legacy here finishing up our careers," Perkins said. "You've got to be able to protect home court. And it's something we thrive ourselves on."
With one home game left, Buffalo's winning streak is the second longest in the nation behind No. 8 Houston, which has won 33 in row.
Tyler Cheese scored 20 points for Akron (15-13, 7-8), which dropped to 2-5 in its past six games and is 1-9 on the road.
The game was a rematch of a nail-biter in which the Bulls won at Akron 76-70 two weeks ago and matched one of the nation's best offenses against one of its stingiest defenses. Buffalo began the day ranked fourth averaging 85.7 points a game, while Akron was 15th in allowing 62.6 points.
The Bulls, who never led by more than three points through the first 35 minutes, finally found their rhythm with 7:02 left after Perkins completed a three-point play to put them up 61-57.
Two minutes later, the crowd erupted when Buffalo's Jayvon Graves blocked Jimond Ivey's layup at one end and ran the court to catch Massinburg's long pass and cap the transition break with a dunk.
"It was a really big momentum swing in our way," Massinburg said. "We got our guys together and it was like, 'Yep, it's time. It's time right here. This is where we go.'"
After Loren Cristian Jackson hit a 3-pointer to cut Buffalo's lead to 63-62, the Bulls took control by wearing down the Zips, who hit one of their final six shots, as well as two free throws.
Davonte Jordan sparked the final run by driving the paint and laying the ball in with a finger roll. Massinburg capped the roll in the final minute by hitting four free throws.
Zips coach John Groce could feel the energy ebb from his team during a timeout following Graves' block and dunk. In the end, matching Buffalo basket for basket through 36 minutes wasn't enough.
"They just keep coming for 40 minutes," Groce said. "That's probably the best compliment I can give them. You've got to play for 40 minutes. They don't let their foot off the gas."
The teams traded leads nine times in the first half, including seven times over the final 5:26, with Cheese's 3-pointer with 3 seconds left putting Akron ahead 36-35 at the break. It marked just the eighth time this season Buffalo has trailed entering the second half.
Buffalo was issued two technical fouls. Perkins picked up the first for pushing Deng Riak after the whistle while both were fighting for a loose ball in the first half. Buffalo got another with 13:20 left in the game when the Bulls were called for having six players on the court.
Groce also had a technical in the final minute.
Akron: The Zips fell to 0-32 against ranked opponents, but gave the Bulls a scare.
Buffalo: The Bulls showed patience and resolve in outlasting the Zips, and finally found success by attacking them in the paint. Buffalo scored 24 of its 42 points in the second half in the paint, which also translated into going 15 of 22 at the free-throw line. The Bulls attempted one free-throw in the first half.
Akron: Host Ohio on Saturday.
Buffalo: At Miami (Ohio) on Friday.