91³Ô¹ÏÍø

Watch CBS News

SMU defeats No. 10 Miami in overtime thriller with Harden's walk-off TD

T.J. Harden scored on a 1-yard run in overtime, and SMU upset No. 10 Miami 26-20 on Saturday, handing the Hurricanes their second loss in three weeks and damaging their playoff hopes.

Moses' interception sets up win 

Ahmaad Moses put the Mustangs (6-3, 4-1 Atlantic Coast) in position to win, even with a field goal by intercepting Carson Beck just short of the goal line on the first possession of the extra period.

Harden's score came on the last of his four consecutive runs as the Mustangs won their 13th consecutive home conference game — a week after losing an ACC regular-season game for the first time in their second season since returning to a power league.

Harden took a handoff and ran left untouched, launching a wild celebration as SMU students stormed the field from the stands behind the Miami bench. Fans toppled the goal post in the end zone where Harden scored.

Late penalty gives SMU life 

Marquise Lightfoot's critical unnecessary roughness penalty on a hit on quarterback Kevin Jennings after Miami called a timeout gave the Mustangs a first down when they were facing fourth-and-9 down three with 1:08 remaining in regulation.

Sam Keltner kicked a tying 38-yard field goal with 25 seconds remaining in regulation after a potential tying 42-yarder with about six minutes to go was ruled no good as the ball sailed over the right upright.

SMU coach Rhett Lashlee, hours after the school announced his two-year contract extension, argued the call, but it wasn't reviewable.

Jennings returns despite injury 

Jennings threw for a touchdown and ran for a score before ignoring an apparent lower left leg injury and returning to finish a drive to Keltner's 43-yard field goal for a 17-all tie in the final second of the third quarter.

Beck had 274 yards passing with touchdowns to Joshisa Trader and Alex Bauman, but threw two interceptions in Miami's first game outside Florida this season.

The Mustangs had negative yards rushing when they started overtime. The 25 yards on the winning possession put them at 23 for the game.

Christobal opts against late push

Miami coach Mario Christobal chose not to go for the win at the end of regulation. He had 25 seconds and a timeout, but Beck took a knee following a touchback on the kickoff.

Jennings was already playing hurt, according to Lashlee, before getting injured again. He was limping badly when he first returned to the field, but looked more mobile as the fourth quarter went on.

Up next 

Miami: Hosts Syracuse next Saturday. SMU: Visits Boston College next Saturday.

View CBS News In
CBS News App Open
Chrome Safari Continue
const link = doc.createElement('link'); link.rel = 'stylesheet'; link.href = '/fly/fly/bundles/cbsnewscontent/css/cmp-banner.min.css?v=50747257b890e014813016b79ece0fb2'; doc.head.appendChild(link); doc.body.innerHTML = CONSENT_MESSAGE; } else { el.insertAdjacentHTML('afterend', CONSENT_MESSAGE); } }); } function hidePrivacyMessage() { // Remove from the main document document.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); // Remove from inside any iframes document.querySelectorAll('iframe').forEach(iframe => { const doc = iframe.contentDocument || iframe.contentWindow.document; doc.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); }); } function activateGatedScripts() { // Handle both new format (cmp-gated-script) and old OneTrust/Ketch format (optanon-category-4) const gatedScripts = Array.from(document.querySelectorAll('script.cmp-gated-script, script.optanon-category-4')); // Activate scripts sequentially with a small delay to avoid timing issues let delay = 0; gatedScripts.forEach(function(placeholder, index) { setTimeout(function() { // Skip if already processed if (placeholder.hasAttribute('data-cmp-processed')) { return; } placeholder.setAttribute('data-cmp-processed', 'true'); const newScript = document.createElement('script'); newScript.type = 'text/javascript'; // Try new format first (data-cmp-src), then fall back to old format (data-src) const src = placeholder.getAttribute('data-cmp-src') || placeholder.getAttribute('data-src'); if (src) { newScript.src = src; } else if (placeholder.textContent) { // Inline script - just copy the content newScript.textContent = placeholder.textContent; } // Handle new format attributes (data-cmp-attrs) - for both inline and external scripts const attrs = placeholder.getAttribute('data-cmp-attrs'); if (attrs) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = '
<\/div>'; const tempAttrs = tempDiv.firstChild.attributes; for (let i = 0; i < tempAttrs.length; i++) { // For external scripts, allow defer/async. For inline scripts, skip them (not valid) if (src || (tempAttrs[i].name !== 'async' && tempAttrs[i].name !== 'defer')) { newScript.setAttribute(tempAttrs[i].name, tempAttrs[i].value); } } } // Copy other attributes from old OneTrust format for (let i = 0; i < placeholder.attributes.length; i++) { const attr = placeholder.attributes[i]; // Skip attributes we've already handled or don't want to copy if (!['class', 'data-src', 'data-type', 'data-cmp-src', 'data-cmp-attrs', 'data-cmp-processed', 'type', 'async', 'defer', 'src'].includes(attr.name)) { newScript.setAttribute(attr.name, attr.value); } } placeholder.parentNode.replaceChild(newScript, placeholder); // If external script, manually trigger window.onload handlers after it loads // This handles widgets that use window.onload for initialization if (src) { newScript.addEventListener('load', function() { // If page already loaded and script set a new onload handler, trigger it if (document.readyState === 'complete' && window.onload) { const originalOnload = window.onload; window.onload = null; // Clear temporarily to prevent loops originalOnload(); // Execute the handler } }); } }, delay); delay += 500; // 500ms delay between each script to allow full loading }); } cbsoptanon.onScriptsReady(function(cmp) { cmp.ot.targetingAllowed(function(allowed) { if (!allowed) { showPrivacyMessage(); } else { activateGatedScripts(); } }); cmp.ot.awaitInitialConsent(function(consent_model) { cmp.ot.addOnConsentChangedHandler(function() { cmp.ot.targetingAllowed(function(allowed) { if (allowed) { hidePrivacyMessage(); activateGatedScripts(); } else { showPrivacyMessage(); } }); }); }); });