User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:184.108.40.206) Gecko/2009080315 Ubuntu/9.04 (jaunty) Firefox/3.0.13
Build Identifier: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:220.127.116.11) Gecko/2009080315 Ubuntu/9.04 (jaunty) Firefox/3.0.13
When I copy-paste a multi-line URL from an other window like this:
", the line-break should be removed automatically. This in deed happens, when I paste into the URL bar (good), but don't happen when I paste with middle mouse button into the main window.
Steps to Reproduce:
1. copy URL with linebreak
2. paste with middle mouse click
3. the linebreak is in the url
The linebreak is in the URL, opening the page fails.
The linebreaks (white spaces) should be removed,
Created attachment 486886 [details] [diff] [review]
proposed fix for the bug
Comment on attachment 486886 [details] [diff] [review]
proposed fix for the bug
Thanks for the patch!
I think a better option would be to just call trim() on the string returned from readFromClipboard(), if any, before passing it to getShortcutOrURI. That will take care of any leading/trailing whitespace, and match the behavior of the URL bar.
Just for future reference, HG diffs are generally recommended (with settings set from https://developer.mozilla.org/en/Installing_Mercurial#Configuration to provide appropriate diff context and such).
trim() would not work, because the problem isn't the leading or trailing whitespaces but the ones in the middle of the string that should not be there, the ones caused by wordwrap made by irc or mail clients, terminal emulators running them, etc.
Ah, I was confused because "stripsurroundingwhitespace" is the name for the behavior we use for the URL bar, and it sounds like that just does trim(). But it does indeed trim embedded newlines and spaces surrounding them:
So let's just use .replace(/\s*\n\s*/g, "");
Yes, it looks like exactly what is necessary, thank you!
Created attachment 489443 [details] [diff] [review]
hg diff updated patch
Landed with a couple of minor tweaks:
in firefox 4, it doesn't work, because .replace doesn't affect the string, just the return value
Created attachment 524054 [details] [diff] [review]
hg diff updated patch, for firefox 4
Urg, that's embarrassing. replace()'s behavior hasn't changed, JS strings are immutable (and always have been). The patch I landed is just broken :(
(In reply to comment #4)
> So let's just use .replace(/\s*\n\s*/g, "");
IIRC \s matches \r and \n. So the first "\s*" shall suffice, shouldn't it?
(In reply to comment #11)
> > So let's just use .replace(/\s*\n\s*/g, "");
> IIRC \s matches \r and \n. So the first "\s*" shall suffice, shouldn't it?
No, because we don't want to remove all whitespace - we only want to remove newlines, and their surrounding whitespace.
Landed a bustage fix, for Firefox 6:
Verified fixed on Mozilla/5.0 (X11; Linux i686; rv:6.0a1) Gecko/20110421 Firefox/6.0a1