diff --git a/bigbluebutton-html5/imports/utils/browserInfo.js b/bigbluebutton-html5/imports/utils/browserInfo.js
index b6a65481cc..235e22ceab 100644
--- a/bigbluebutton-html5/imports/utils/browserInfo.js
+++ b/bigbluebutton-html5/imports/utils/browserInfo.js
@@ -1,4 +1,5 @@
import Bowser from 'bowser';
+import logger from '/imports/startup/client/logger';
const userAgent = window.navigator.userAgent;
const BOWSER_RESULTS = Bowser.parse(userAgent);
@@ -10,7 +11,29 @@ const isIe = BOWSER_RESULTS.browser.name === 'Internet Explorer';
const isFirefox = BOWSER_RESULTS.browser.name === 'Firefox';
const browserName = BOWSER_RESULTS.browser.name;
-const versionNumber = BOWSER_RESULTS.browser.version;
+
+const getVersionNumber = () => {
+ if (BOWSER_RESULTS.browser.version) return BOWSER_RESULTS.browser.version;
+
+ // There are some scenarios (e.g.; WKWebView) where Bowser can't detect the
+ // Safari version. In such cases, we can use the WebKit version to determine
+ // it.
+ if (isSafari && BOWSER_RESULTS.engine.version) return BOWSER_RESULTS.engine.version;
+
+ // If the version number is not available, log an warning and return Infinity
+ // so that we do not deny access to the user (even if we're uncertain about
+ // whether it's a supported browser).
+ logger.warn({
+ logCode: 'browserInfo_invalid_version',
+ extraInfo: {
+ userAgent,
+ },
+ }, 'Unable to determine the browser version number');
+
+ return 'Infinity';
+};
+
+const versionNumber = getVersionNumber();
const isValidSafariVersion = Bowser.getParser(userAgent).satisfies({
safari: '>12',