If someone has an older svn version or is logged in into the a23 and a22 lobby at the same time while playing in a22 everyone in the a23 gets an error that prevents showing the gamelist. Ignore such games so that the lobby becomes more robust.
Details
Host a lobbied game with old svn and enter the lobby with recent svn.
Diff Detail
- Repository
- rP 0 A.D. Public Repository
- Lint
Automatic diff as part of commit; lint not applicable. - Unit
Automatic diff as part of commit; unit tests not applicable.
Event Timeline
Successful build - Chance fights ever on the side of the prudent.
Linter detected issues: Executing section Default... Executing section Source... Executing section JS... | | [NORMAL] ESLintBear (no-multi-spaces): | | Multiple spaces found before '"status"'. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 47| 47| * The playerlist will be assembled using these values. | 48| 48| */ | 49| 49| var g_PlayerStatuses = { | 50| |- "available": { "color": "0 219 0", "status": translate("Online") }, | | 50|+ "available": { "color": "0 219 0", "status": translate("Online") }, | 51| 51| "away": { "color": "229 76 13", "status": translate("Away") }, | 52| 52| "playing": { "color": "200 0 0", "status": translate("Busy") }, | 53| 53| "offline": { "color": "0 0 0", "status": translate("Offline") }, | | [NORMAL] ESLintBear (key-spacing): | | Extra space before value for key 'away'. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 48| 48| */ | 49| 49| var g_PlayerStatuses = { | 50| 50| "available": { "color": "0 219 0", "status": translate("Online") }, | 51| |- "away": { "color": "229 76 13", "status": translate("Away") }, | | 51|+ "away": { "color": "229 76 13", "status": translate("Away") }, | 52| 52| "playing": { "color": "200 0 0", "status": translate("Busy") }, | 53| 53| "offline": { "color": "0 0 0", "status": translate("Offline") }, | 54| 54| "unknown": { "color": "178 178 178", "status": translateWithContext("lobby presence", "Unknown") } | | [NORMAL] ESLintBear (no-multi-spaces): | | Multiple spaces found before '"status"'. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 48| 48| */ | 49| 49| var g_PlayerStatuses = { | 50| 50| "available": { "color": "0 219 0", "status": translate("Online") }, | 51| |- "away": { "color": "229 76 13", "status": translate("Away") }, | | 51|+ "away": { "color": "229 76 13", "status": translate("Away") }, | 52| 52| "playing": { "color": "200 0 0", "status": translate("Busy") }, | 53| 53| "offline": { "color": "0 0 0", "status": translate("Offline") }, | 54| 54| "unknown": { "color": "178 178 178", "status": translateWithContext("lobby presence", "Unknown") } | | [NORMAL] ESLintBear (key-spacing): | | Extra space before value for key 'playing'. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 49| 49| var g_PlayerStatuses = { | 50| 50| "available": { "color": "0 219 0", "status": translate("Online") }, | 51| 51| "away": { "color": "229 76 13", "status": translate("Away") }, | 52| |- "playing": { "color": "200 0 0", "status": translate("Busy") }, | | 52|+ "playing": { "color": "200 0 0", "status": translate("Busy") }, | 53| 53| "offline": { "color": "0 0 0", "status": translate("Offline") }, | 54| 54| "unknown": { "color": "178 178 178", "status": translateWithContext("lobby presence", "Unknown") } | 55| 55| }; | | [NORMAL] ESLintBear (no-multi-spaces): | | Multiple spaces found before '"status"'. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 49| 49| var g_PlayerStatuses = { | 50| 50| "available": { "color": "0 219 0", "status": translate("Online") }, | 51| 51| "away": { "color": "229 76 13", "status": translate("Away") }, | 52| |- "playing": { "color": "200 0 0", "status": translate("Busy") }, | | 52|+ "playing": { "color": "200 0 0", "status": translate("Busy") }, | 53| 53| "offline": { "color": "0 0 0", "status": translate("Offline") }, | 54| 54| "unknown": { "color": "178 178 178", "status": translateWithContext("lobby presence", "Unknown") } | 55| 55| }; | | [NORMAL] ESLintBear (key-spacing): | | Extra space before value for key 'offline'. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 50| 50| "available": { "color": "0 219 0", "status": translate("Online") }, | 51| 51| "away": { "color": "229 76 13", "status": translate("Away") }, | 52| 52| "playing": { "color": "200 0 0", "status": translate("Busy") }, | 53| |- "offline": { "color": "0 0 0", "status": translate("Offline") }, | | 53|+ "offline": { "color": "0 0 0", "status": translate("Offline") }, | 54| 54| "unknown": { "color": "178 178 178", "status": translateWithContext("lobby presence", "Unknown") } | 55| 55| }; | 56| 56| | | [NORMAL] ESLintBear (no-multi-spaces): | | Multiple spaces found before '"status"'. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 50| 50| "available": { "color": "0 219 0", "status": translate("Online") }, | 51| 51| "away": { "color": "229 76 13", "status": translate("Away") }, | 52| 52| "playing": { "color": "200 0 0", "status": translate("Busy") }, | 53| |- "offline": { "color": "0 0 0", "status": translate("Offline") }, | | 53|+ "offline": { "color": "0 0 0", "status": translate("Offline") }, | 54| 54| "unknown": { "color": "178 178 178", "status": translateWithContext("lobby presence", "Unknown") } | 55| 55| }; | 56| 56| | | [NORMAL] ESLintBear (key-spacing): | | Extra space before value for key 'unknown'. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 51| 51| "away": { "color": "229 76 13", "status": translate("Away") }, | 52| 52| "playing": { "color": "200 0 0", "status": translate("Busy") }, | 53| 53| "offline": { "color": "0 0 0", "status": translate("Offline") }, | 54| |- "unknown": { "color": "178 178 178", "status": translateWithContext("lobby presence", "Unknown") } | | 54|+ "unknown": { "color": "178 178 178", "status": translateWithContext("lobby presence", "Unknown") } | 55| 55| }; | 56| 56| | 57| 57| var g_RoleNames = { | | [NORMAL] ESLintBear (indent): | | Expected indentation of 5 tabs but found 4. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 219| 219| me ? | 220| 220| translate("You have been muted.") : | 221| 221| translate("%(nick)s has been muted.") : | 222| |- newrole == "moderator" ? | | 222|+ newrole == "moderator" ? | 223| 223| me ? | 224| 224| translate("You are now a moderator.") : | 225| 225| translate("%(nick)s is now a moderator.") : | | [NORMAL] ESLintBear (indent): | | Expected indentation of 6 tabs but found 5. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 220| 220| translate("You have been muted.") : | 221| 221| translate("%(nick)s has been muted.") : | 222| 222| newrole == "moderator" ? | 223| |- me ? | | 223|+ me ? | 224| 224| translate("You are now a moderator.") : | 225| 225| translate("%(nick)s is now a moderator.") : | 226| 226| msg.oldrole == "visitor" ? | | [NORMAL] ESLintBear (indent): | | Expected indentation of 7 tabs but found 6. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 221| 221| translate("%(nick)s has been muted.") : | 222| 222| newrole == "moderator" ? | 223| 223| me ? | 224| |- translate("You are now a moderator.") : | | 224|+ translate("You are now a moderator.") : | 225| 225| translate("%(nick)s is now a moderator.") : | 226| 226| msg.oldrole == "visitor" ? | 227| 227| me ? | | [NORMAL] ESLintBear (indent): | | Expected indentation of 7 tabs but found 6. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 222| 222| newrole == "moderator" ? | 223| 223| me ? | 224| 224| translate("You are now a moderator.") : | 225| |- translate("%(nick)s is now a moderator.") : | | 225|+ translate("%(nick)s is now a moderator.") : | 226| 226| msg.oldrole == "visitor" ? | 227| 227| me ? | 228| 228| translate("You have been unmuted.") : | | [NORMAL] ESLintBear (indent): | | Expected indentation of 6 tabs but found 4. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 223| 223| me ? | 224| 224| translate("You are now a moderator.") : | 225| 225| translate("%(nick)s is now a moderator.") : | 226| |- msg.oldrole == "visitor" ? | | 226|+ msg.oldrole == "visitor" ? | 227| 227| me ? | 228| 228| translate("You have been unmuted.") : | 229| 229| translate("%(nick)s has been unmuted.") : | | [NORMAL] ESLintBear (indent): | | Expected indentation of 7 tabs but found 5. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 224| 224| translate("You are now a moderator.") : | 225| 225| translate("%(nick)s is now a moderator.") : | 226| 226| msg.oldrole == "visitor" ? | 227| |- me ? | | 227|+ me ? | 228| 228| translate("You have been unmuted.") : | 229| 229| translate("%(nick)s has been unmuted.") : | 230| 230| me ? | | [NORMAL] ESLintBear (indent): | | Expected indentation of 8 tabs but found 6. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 225| 225| translate("%(nick)s is now a moderator.") : | 226| 226| msg.oldrole == "visitor" ? | 227| 227| me ? | 228| |- translate("You have been unmuted.") : | | 228|+ translate("You have been unmuted.") : | 229| 229| translate("%(nick)s has been unmuted.") : | 230| 230| me ? | 231| 231| translate("You are not a moderator anymore.") : | | [NORMAL] ESLintBear (indent): | | Expected indentation of 8 tabs but found 6. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 226| 226| msg.oldrole == "visitor" ? | 227| 227| me ? | 228| 228| translate("You have been unmuted.") : | 229| |- translate("%(nick)s has been unmuted.") : | | 229|+ translate("%(nick)s has been unmuted.") : | 230| 230| me ? | 231| 231| translate("You are not a moderator anymore.") : | 232| 232| translate("%(nick)s is not a moderator anymore."); | | [NORMAL] ESLintBear (indent): | | Expected indentation of 7 tabs but found 5. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 227| 227| me ? | 228| 228| translate("You have been unmuted.") : | 229| 229| translate("%(nick)s has been unmuted.") : | 230| |- me ? | | 230|+ me ? | 231| 231| translate("You are not a moderator anymore.") : | 232| 232| translate("%(nick)s is not a moderator anymore."); | 233| 233| | | [NORMAL] ESLintBear (indent): | | Expected indentation of 8 tabs but found 6. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 228| 228| translate("You have been unmuted.") : | 229| 229| translate("%(nick)s has been unmuted.") : | 230| 230| me ? | 231| |- translate("You are not a moderator anymore.") : | | 231|+ translate("You are not a moderator anymore.") : | 232| 232| translate("%(nick)s is not a moderator anymore."); | 233| 233| | 234| 234| addChatMessage({ | | [NORMAL] ESLintBear (indent): | | Expected indentation of 8 tabs but found 6. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 229| 229| translate("%(nick)s has been unmuted.") : | 230| 230| me ? | 231| 231| translate("You are not a moderator anymore.") : | 232| |- translate("%(nick)s is not a moderator anymore."); | | 232|+ translate("%(nick)s is not a moderator anymore."); | 233| 233| | 234| 234| addChatMessage({ | 235| 235| "text": "/special " + sprintf(txt, { "nick": msg.nick }), binaries/data/mods/public/gui/lobby/lobby.js |1026| » » switch·(sortBy) | | [NORMAL] ESLintBear (default-case): | | Expected a default case. binaries/data/mods/public/gui/lobby/lobby.js |1286| » while·(true) | | [NORMAL] ESLintBear (no-constant-condition): | | Unexpected constant condition. binaries/data/mods/public/gui/lobby/lobby.js | 729| » » case·'name': | | [NORMAL] JSHintBear: | | Expected a 'break' statement before 'default'.
Link to build: https://jenkins.wildfiregames.com/job/differential/454/display/redirect
binaries/data/mods/public/gui/lobby/lobby.js | ||
---|---|---|
1020 ↗ | (On Diff #6500) | JSON.parse throws equally nasty errors if someone sent malformed data such as empty string. |
binaries/data/mods/public/gui/lobby/lobby.js | ||
---|---|---|
1020 ↗ | (On Diff #6500) | I guess empty string is filtered, but "Ignore games with no valid modentry" is not met yet technically. Anyway, IMO if we want that it should be entirely revised. gamedescription.js needs conditions in every or every second statement I think. Especially for mods it might be possible to break things. |
To be fair I'm not sure how someone managed to log in the lobby with an outdated SVN by mistake. Probably using the development PPA, but once again, who would install that by mistake? What are the odds...
So we might be worrying too much because the bug happened at the exact moment when we were trying the RCs, which is really bad luck.
What I mean is: if you really think this patch is half-baked and shouldn't be committed in a hurry, let's just not commit it and yell at the people who use outdated SVNs without a clue. I wouldn't disagree.
Not really accepted by elexis, and since you seem to be AFK I restarted packaging for a second RC.
That's where the wireless keyboard comes in handy. Other than that it seems like a market gap.
If someone has an older svn version
adding backwards compatibility is on the anti-TODO list, but
gets an error that prevents showing the gamelist
is an important part.
It follows that we must also catch the other SyntaxErrors that can happen.
I don't know how these players got it, but they triggered it in the lobby and people couldn't play:
Unmodified:
WARNING: ({ name: "", ip: "", port: "", stunIP: "", stunPort: "", hostUsername: "", state: "init", nbp: "3", maxnbp: "", players: "{\"-1\":\\[{\"Name\":\"SaudiNiinisto (1135)\",\"Civ\":\"ptol\",\"Team\":-1},{\"Name\":\"hakaristi\",\"Civ\":\"iber\",\"Team\":-1},{\"Name\":\"ficcsuccing (1255)\",\"Civ\":\"pers\",\"Team\":-1}]}", mapName: "", niceMapName: "", mapSize: "", mapType: "", victoryCondition: "", startTime: "", mods: "", hasBuddies: 0, gameRating: 1197 })
This doesn't even look like an outdated version.
A try-catch block were better, right?
(Also we need to do it in two places (joingame button) and then duplicate the try-catch block? May consider or not to introduce a global to remove that duplication)
@Imarok if that can be implemented in a riskfree way, we can consider committing it for the re-release.
Successful build - Chance fights ever on the side of the prudent.
Linter detected issues: Executing section Default... Executing section Source... Executing section JS... binaries/data/mods/public/gui/common/functions_utility.js | 96| » { | | [NORMAL] ESLintBear (no-empty): | | Empty block statement. binaries/data/mods/public/gui/common/functions_utility.js | 186| » }·catch·(e)·{ | | [NORMAL] ESLintBear (no-empty): | | Empty block statement. | | [NORMAL] ESLintBear (no-multi-spaces): | | Multiple spaces found before '"status"'. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 47| 47| * The playerlist will be assembled using these values. | 48| 48| */ | 49| 49| var g_PlayerStatuses = { | 50| |- "available": { "color": "0 219 0", "status": translate("Online") }, | | 50|+ "available": { "color": "0 219 0", "status": translate("Online") }, | 51| 51| "away": { "color": "229 76 13", "status": translate("Away") }, | 52| 52| "playing": { "color": "200 0 0", "status": translate("Busy") }, | 53| 53| "offline": { "color": "0 0 0", "status": translate("Offline") }, | | [NORMAL] ESLintBear (key-spacing): | | Extra space before value for key 'away'. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 48| 48| */ | 49| 49| var g_PlayerStatuses = { | 50| 50| "available": { "color": "0 219 0", "status": translate("Online") }, | 51| |- "away": { "color": "229 76 13", "status": translate("Away") }, | | 51|+ "away": { "color": "229 76 13", "status": translate("Away") }, | 52| 52| "playing": { "color": "200 0 0", "status": translate("Busy") }, | 53| 53| "offline": { "color": "0 0 0", "status": translate("Offline") }, | 54| 54| "unknown": { "color": "178 178 178", "status": translateWithContext("lobby presence", "Unknown") } | | [NORMAL] ESLintBear (no-multi-spaces): | | Multiple spaces found before '"status"'. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 48| 48| */ | 49| 49| var g_PlayerStatuses = { | 50| 50| "available": { "color": "0 219 0", "status": translate("Online") }, | 51| |- "away": { "color": "229 76 13", "status": translate("Away") }, | | 51|+ "away": { "color": "229 76 13", "status": translate("Away") }, | 52| 52| "playing": { "color": "200 0 0", "status": translate("Busy") }, | 53| 53| "offline": { "color": "0 0 0", "status": translate("Offline") }, | 54| 54| "unknown": { "color": "178 178 178", "status": translateWithContext("lobby presence", "Unknown") } | | [NORMAL] ESLintBear (key-spacing): | | Extra space before value for key 'playing'. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 49| 49| var g_PlayerStatuses = { | 50| 50| "available": { "color": "0 219 0", "status": translate("Online") }, | 51| 51| "away": { "color": "229 76 13", "status": translate("Away") }, | 52| |- "playing": { "color": "200 0 0", "status": translate("Busy") }, | | 52|+ "playing": { "color": "200 0 0", "status": translate("Busy") }, | 53| 53| "offline": { "color": "0 0 0", "status": translate("Offline") }, | 54| 54| "unknown": { "color": "178 178 178", "status": translateWithContext("lobby presence", "Unknown") } | 55| 55| }; | | [NORMAL] ESLintBear (no-multi-spaces): | | Multiple spaces found before '"status"'. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 49| 49| var g_PlayerStatuses = { | 50| 50| "available": { "color": "0 219 0", "status": translate("Online") }, | 51| 51| "away": { "color": "229 76 13", "status": translate("Away") }, | 52| |- "playing": { "color": "200 0 0", "status": translate("Busy") }, | | 52|+ "playing": { "color": "200 0 0", "status": translate("Busy") }, | 53| 53| "offline": { "color": "0 0 0", "status": translate("Offline") }, | 54| 54| "unknown": { "color": "178 178 178", "status": translateWithContext("lobby presence", "Unknown") } | 55| 55| }; | | [NORMAL] ESLintBear (key-spacing): | | Extra space before value for key 'offline'. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 50| 50| "available": { "color": "0 219 0", "status": translate("Online") }, | 51| 51| "away": { "color": "229 76 13", "status": translate("Away") }, | 52| 52| "playing": { "color": "200 0 0", "status": translate("Busy") }, | 53| |- "offline": { "color": "0 0 0", "status": translate("Offline") }, | | 53|+ "offline": { "color": "0 0 0", "status": translate("Offline") }, | 54| 54| "unknown": { "color": "178 178 178", "status": translateWithContext("lobby presence", "Unknown") } | 55| 55| }; | 56| 56| | | [NORMAL] ESLintBear (no-multi-spaces): | | Multiple spaces found before '"status"'. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 50| 50| "available": { "color": "0 219 0", "status": translate("Online") }, | 51| 51| "away": { "color": "229 76 13", "status": translate("Away") }, | 52| 52| "playing": { "color": "200 0 0", "status": translate("Busy") }, | 53| |- "offline": { "color": "0 0 0", "status": translate("Offline") }, | | 53|+ "offline": { "color": "0 0 0", "status": translate("Offline") }, | 54| 54| "unknown": { "color": "178 178 178", "status": translateWithContext("lobby presence", "Unknown") } | 55| 55| }; | 56| 56| | | [NORMAL] ESLintBear (key-spacing): | | Extra space before value for key 'unknown'. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 51| 51| "away": { "color": "229 76 13", "status": translate("Away") }, | 52| 52| "playing": { "color": "200 0 0", "status": translate("Busy") }, | 53| 53| "offline": { "color": "0 0 0", "status": translate("Offline") }, | 54| |- "unknown": { "color": "178 178 178", "status": translateWithContext("lobby presence", "Unknown") } | | 54|+ "unknown": { "color": "178 178 178", "status": translateWithContext("lobby presence", "Unknown") } | 55| 55| }; | 56| 56| | 57| 57| var g_RoleNames = { | | [NORMAL] ESLintBear (indent): | | Expected indentation of 5 tabs but found 4. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 219| 219| me ? | 220| 220| translate("You have been muted.") : | 221| 221| translate("%(nick)s has been muted.") : | 222| |- newrole == "moderator" ? | | 222|+ newrole == "moderator" ? | 223| 223| me ? | 224| 224| translate("You are now a moderator.") : | 225| 225| translate("%(nick)s is now a moderator.") : | | [NORMAL] ESLintBear (indent): | | Expected indentation of 6 tabs but found 5. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 220| 220| translate("You have been muted.") : | 221| 221| translate("%(nick)s has been muted.") : | 222| 222| newrole == "moderator" ? | 223| |- me ? | | 223|+ me ? | 224| 224| translate("You are now a moderator.") : | 225| 225| translate("%(nick)s is now a moderator.") : | 226| 226| msg.oldrole == "visitor" ? | | [NORMAL] ESLintBear (indent): | | Expected indentation of 7 tabs but found 6. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 221| 221| translate("%(nick)s has been muted.") : | 222| 222| newrole == "moderator" ? | 223| 223| me ? | 224| |- translate("You are now a moderator.") : | | 224|+ translate("You are now a moderator.") : | 225| 225| translate("%(nick)s is now a moderator.") : | 226| 226| msg.oldrole == "visitor" ? | 227| 227| me ? | | [NORMAL] ESLintBear (indent): | | Expected indentation of 7 tabs but found 6. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 222| 222| newrole == "moderator" ? | 223| 223| me ? | 224| 224| translate("You are now a moderator.") : | 225| |- translate("%(nick)s is now a moderator.") : | | 225|+ translate("%(nick)s is now a moderator.") : | 226| 226| msg.oldrole == "visitor" ? | 227| 227| me ? | 228| 228| translate("You have been unmuted.") : | | [NORMAL] ESLintBear (indent): | | Expected indentation of 6 tabs but found 4. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 223| 223| me ? | 224| 224| translate("You are now a moderator.") : | 225| 225| translate("%(nick)s is now a moderator.") : | 226| |- msg.oldrole == "visitor" ? | | 226|+ msg.oldrole == "visitor" ? | 227| 227| me ? | 228| 228| translate("You have been unmuted.") : | 229| 229| translate("%(nick)s has been unmuted.") : | | [NORMAL] ESLintBear (indent): | | Expected indentation of 7 tabs but found 5. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 224| 224| translate("You are now a moderator.") : | 225| 225| translate("%(nick)s is now a moderator.") : | 226| 226| msg.oldrole == "visitor" ? | 227| |- me ? | | 227|+ me ? | 228| 228| translate("You have been unmuted.") : | 229| 229| translate("%(nick)s has been unmuted.") : | 230| 230| me ? | | [NORMAL] ESLintBear (indent): | | Expected indentation of 8 tabs but found 6. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 225| 225| translate("%(nick)s is now a moderator.") : | 226| 226| msg.oldrole == "visitor" ? | 227| 227| me ? | 228| |- translate("You have been unmuted.") : | | 228|+ translate("You have been unmuted.") : | 229| 229| translate("%(nick)s has been unmuted.") : | 230| 230| me ? | 231| 231| translate("You are not a moderator anymore.") : | | [NORMAL] ESLintBear (indent): | | Expected indentation of 8 tabs but found 6. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 226| 226| msg.oldrole == "visitor" ? | 227| 227| me ? | 228| 228| translate("You have been unmuted.") : | 229| |- translate("%(nick)s has been unmuted.") : | | 229|+ translate("%(nick)s has been unmuted.") : | 230| 230| me ? | 231| 231| translate("You are not a moderator anymore.") : | 232| 232| translate("%(nick)s is not a moderator anymore."); | | [NORMAL] ESLintBear (indent): | | Expected indentation of 7 tabs but found 5. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 227| 227| me ? | 228| 228| translate("You have been unmuted.") : | 229| 229| translate("%(nick)s has been unmuted.") : | 230| |- me ? | | 230|+ me ? | 231| 231| translate("You are not a moderator anymore.") : | 232| 232| translate("%(nick)s is not a moderator anymore."); | 233| 233| | | [NORMAL] ESLintBear (indent): | | Expected indentation of 8 tabs but found 6. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 228| 228| translate("You have been unmuted.") : | 229| 229| translate("%(nick)s has been unmuted.") : | 230| 230| me ? | 231| |- translate("You are not a moderator anymore.") : | | 231|+ translate("You are not a moderator anymore.") : | 232| 232| translate("%(nick)s is not a moderator anymore."); | 233| 233| | 234| 234| addChatMessage({ | | [NORMAL] ESLintBear (indent): | | Expected indentation of 8 tabs but found 6. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/lobby/lobby.js | 229| 229| translate("%(nick)s has been unmuted.") : | 230| 230| me ? | 231| 231| translate("You are not a moderator anymore.") : | 232| |- translate("%(nick)s is not a moderator anymore."); | | 232|+ translate("%(nick)s is not a moderator anymore."); | 233| 233| | 234| 234| addChatMessage({ | 235| 235| "text": "/special " + sprintf(txt, { "nick": msg.nick }), binaries/data/mods/public/gui/lobby/lobby.js |1035| » » switch·(sortBy) | | [NORMAL] ESLintBear (default-case): | | Expected a default case. binaries/data/mods/public/gui/lobby/lobby.js |1295| » while·(true) | | [NORMAL] ESLintBear (no-constant-condition): | | Unexpected constant condition. binaries/data/mods/public/gui/lobby/lobby.js | 729| » » case·'name': | | [NORMAL] JSHintBear: | | Expected a 'break' statement before 'default'.
Link to build: https://jenkins.wildfiregames.com/job/differential/576/display/redirect
Looks good, tested.
(Couldn't test a malformed report, as that would have broken the game for all A23 players)
binaries/data/mods/public/gui/common/functions_utility.js | ||
---|---|---|
95–97 ↗ | (On Diff #6650) | catch(e) {} ? |
One can set game = {.... game above } in the map function to test it, I guess that's what you did.
Thanks review
binaries/data/mods/public/gui/common/functions_utility.js | ||
---|---|---|
95–97 ↗ | (On Diff #6650) | can do |
I've had a look at the C++ calls to ParseJSON too. They result in an error message but then the program continues it's service when possible.
It seems none of them could be used to deny someones unrelated service. (Only people trying to open a broken replay, savegame or join a broken game would be unable to play, so users could fix it themselves as opposed to this problem which requires moderator investigation without this patch).
gamedescription.js has potential for some evil, bugexperiencing or modusing participant to show errors on lobby participants, but I don't think it can result in denial of service.
That's why this patch is suited for the rerelease.