WhichBrowser/Parser-JavaScript

Crash for some user-agents

Closed this issue · 4 comments

stouf commented

I recently tried to use this library for parsing a bunch of user-agents but it crashed for the following one:

Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; O+ 8.36 Android Build/Oplus8.36_Oplus) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30

I used the following code, which worked just fine on many user-agents before crashing on the one I mentioned above:

'use strict';

const WhichBrowser = require('which-browser');

const useragent = 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; O+ 8.36 Android Build/Oplus8.36_Oplus) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30';

// It is using a hard-coded user agent here, but this is how I was successfully using the library with other
// user-agents
const info = new WhichBrowser(useragent, {
  cache: WhichBrowser.SIMPLE_CACHE,
  cacheExpires: 90
});

console.log('Done!');

Here is the error:

/home/user/test/which-browser/node_modules/which-browser/src/data/DeviceModels.js:200
                for (let m2 of Object.keys(list[v] || list[originalV])) {
                                      ^

TypeError: Cannot convert undefined or null to object
    at Function.keys (<anonymous>)
    at Function.identifyList (/home/user/test/which-browser/node_modules/which-browser/src/data/DeviceModels.js:200:39)
    at Function.identifyAndroid (/home/user/test/which-browser/node_modules/which-browser/src/data/DeviceModels.js:145:33)
    at Function.identify (/home/user/test/which-browser/node_modules/which-browser/src/data/DeviceModels.js:25:29)
    at Useragent.detectAndroid (/home/user/test/which-browser/node_modules/which-browser/src/Analyser/Header/Useragent/Os.js:325:35)
    at Useragent.detectOperatingSystem (/home/user/test/which-browser/node_modules/which-browser/src/Analyser/Header/Useragent/Os.js:20:22)
    at new Useragent (/home/user/test/which-browser/node_modules/which-browser/src/Analyser/Header/Useragent.js:13:30)
    at Analyser.analyseUserAgent (/home/user/test/which-browser/node_modules/which-browser/src/Analyser/Header.js:74:5)
    at Analyser.analyseHeaders (/home/user/test/which-browser/node_modules/which-browser/src/Analyser/Header.js:11:31)
    at Analyser.analyse (/home/user/test/which-browser/node_modules/which-browser/src/Analyser.js:45:27)

I also noticed something interesting: the user-agent mentioned above can be successfully parsed by https://whichbrowser.net/tryout/

Thanks for the issue. I'll try to investigate this.

Found the problem. Thanks for pointing it out. I'll fix asap

Version 0.2.5 is out, fixes this issue and contains updates for the database and the detection system (thanks @NielsLeenheer ).

@stouf thanks for reporting this issue and for using this library.

Enjoy!

stouf commented

@mariotsi Thanks a lot for taking such quick actions, much appreciated :)