ua-parser-js
ua-parser-js copied to clipboard
getOS throws an error on set-top box
Library version 1.0.37
Describe the bug
When calling getOS() on a Vodafone GigaTV set-top box, an error is thrown TypeError: Cannot read property 'replace' of undefined.
The error happens in the code block starting in https://github.com/faisalman/ua-parser-js/blob/1.0.37/src/ua-parser.js#L868:
if (_isSelfNav && !_os[NAME] && _uach && _uach.platform != 'Unknown') {
_os[NAME] = _uach.platform
.replace(/chrome os/i, CHROMIUM_OS)
.replace(/macos/i, MAC_OS); // backward compatibility
The browser running on the set-top box is a Opera for Devices 4.22.1, similar to Chrome 94, but with several differences. One difference is that navigator.userAgentData exists, but is an empty object.
So the check _uach succeeds, also does _uach.platform != 'Unknown' (undefined != 'Unknown'). However, _uach.platform.replace() throws the error, since _uach.platform is undefined).
To Reproduce
If you're not a registered developer for that set-top box, there's no way to reproduce the behavior. You can mimic it by setting var _uach = {}; in line 818.
The browser's user agent is Mozilla/5.0, AppleWebKit/537.36, Chrome/92.0.4515.159, Safari/537.36, OPR/46.0.2207.0, OMI/4.22.1, VODAFONE_STB/7.2.A105.99bba.ngc BCM7271/7.2.A105.99bba.ngc/DTIW387/HIGH (Sagemcom_Broadband_SAS, DTIW387_UHD_VF_DE, Wireless)
Expected behavior
getOS() never throws an error.