ID:2624266
 
Resolved
Microsoft made a stupid, stupid change to command line parsing that impacted link() and caused incorrect results on many systems where the default browser was Chromium-based. The behavior of link() has been adjusted to account for this stupid, stupid change.
BYOND Version:513.1533
Operating System:Windows 10 Pro 64-bit
Web Browser:Chrome 86.0.4240.75
Applies to:Dream Seeker
Status: Resolved (513.1534)

This issue has been resolved.
Descriptive Problem Summary:

The link() proc is appending %22 before and after links, causing them to fail to load.

Numbered Steps to Reproduce Problem:

1) Use link()
2) Get the wrong page.

Code Snippet (if applicable) to Reproduce Problem:
src << link("https://google.com") // Same with http:// links.


Expected Results:

Page to open.

Actual Results:

Page link gets %22 added before and after.

Does the problem occur:
Every time? Or how often? Every time.
In other games? Client-sided it seems.
In other user accounts? Yes
On other computers? Yes

When does the problem NOT occur?

When using Firefox

Did the problem NOT occur in any earlier versions? If so, what was the last version that worked? (Visit http://www.byond.com/download/build to download old versions for testing.)

This happens in all versions due to it being caused by a Windows update.
Workarounds:

Use icky Firefox.


[Edit]

This is specific to Chromium-based browsers and users running a certain Windows update and later (unsure which), Firefox isn't affected.
Nevermind, just didn't notice it before, it's happening as far back as 1528.
Upon more investimagation, this is starting to feel like a Windows Update that broke something with the way arguments are handled when invoking an external program. It's broken as far back as I've bothered to go, including versions I know it worked in previously.

Looks like Microsoft is slowly but surely adopting more and more wide standards, like POSIX formatting for command line stuff. The formatting of BYOND's invocation of links is invalid for that standard and started breaking whenever the Windows Update dropped that updated how the command line handles arguments.

The fix is as simple as removing "--single-argument" from the CreateProcessW() call, since 1) it's not valid for any modern browsers, 2) it's forcing the quotation marks around the URL to be read as part of the URL.

[Edit]

Not BYOND adding --single-argument, the browsers themselves do it in their shell execution registry entries. This can be worked around by editing those, or using Firefox.
Is a combination of the changes to Windows' command line handling and how BYOND adds quotes around arguments.

https://www.gnu.org/software/libc/manual/html_node/ Argument-Syntax.html

This is the POSIX standard that Windows seems to be following now. The usage of -- as the first argument (which is how Chromium-based browsers set their shell execution up) is interacting badly with quotation marks and causing things to blow up. The browsers themselves expect no quotations around the URL, as that doesn't follow the standard anymore.
Lummox JR resolved issue with message:
Microsoft made a stupid, stupid change to command line parsing that impacted link() and caused incorrect results on many systems where the default browser was Chromium-based. The behavior of link() has been adjusted to account for this stupid, stupid change.


Screenshots URLs r broke too