pidgin/pidgin

Change how we handle clicking on file:// links on Windows.
release-2.x.y
2014-01-12, Mark Doliner
b2571530fa8b
Change how we handle clicking on file:// links on Windows.

Previously we attempted to exec the file. This can be dangerous if
someone sends you a link to a malicious remote file. For now we're
going to open Explorer at the file's location. The user can decide
from there what they want to do--hopefully it'll be more obvious
what they're exec'ing and they can make a more informed decision.

This was a pretty easy change. We already had code to launch explorer.exe
that Eion wrote in this commit:
https://hg.pidgin.im/pidgin/main/rev/4377067bda01

But due to a bug it was only getting triggered if the URI was
"file://file://something"

A possibly better approach is for us to show an "are you sure you
want to do this?" prompt. I don't want to do that in 2.x.y, but
we could do it in default.


REGARDING ESCAPING
We weren't correctly escaping the file path that we passed to explorer.exe.
I believe this would have allowed a remote users to craft links that pass
arbitrary parameters to explorer.exe. I think it is not possible to craft
links that would exec other commands, and the arguments to explorer.exe
look fairly innocuous, so I don't think this is a major problem. But of
course we should fix it--we want to dictate how file:// are opened, we
don't want remote users to be able to dictate this.

The old code called g_shell_quote() to attempt to escape the URI, but it
didn't actually use the return value. Additionally g_shell_quote()
doesn't do what we want. It wrapps the string in single quotes and
escapes single quotes with a backslash. We really just want to escape
double quotes with a double quote.

Incidentally, explorer.exe argument parsing is bat shit crazy [1]. Args
are separated by commas or equals (not spaces). Double-quotes can be
used to wrap an argument but somehow double-quotes within an argument are
ignored. If the first field in an argument is not '/' then the entire
thing is interpreted as a path (until the next comma or equals, I guess?)
For something that's been around for 20 years and is a core piece of
the OS you'd think it would have half-way respectable argument parsing.
Then again, it's Windows.

[1] http://www.geoffchappell.com/studies/windows/shell/explorer/cmdline.htm
Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
==========================================================================
For a complete list of all contributors, see the COPYRIGHT file.
We've got an IRC room now too, #pidgin on irc.freenode.net. Come check us out.
Current Developers:
------------------
Daniel 'datallah' Atallah - Developer
Paul 'darkrain42' Aurich - Developer
John 'rekkanoryo' Bailey - Developer
Ethan 'Paco-Paco' Blanton - Developer
Sadrul Habib Chowdhury - Developer
Mark 'KingAnt' Doliner - Developer
Casey Harkins - Developer
Ivan Komarov - Developer
Gary 'grim' Kramlich - Developer
Richard 'rlaager' Laager - Developer
Marcus 'malu' Lundblad - Developer
Sulabh 'sulabh_m' Mahajan - Developer
Richard 'wabz' Nelson - Developer
Etan 'deryni' Reisner - Developer
Michael 'Maiku' Ruprecht - Developer, voice and video
Elliott 'QuLogic' Sales de Andrade - Developer
Luke 'LSchiere' Schierer - Support
Evan Schoenberg - Developer
Kevin 'SimGuy' Stange - Developer & Webmaster
Will 'resiak' Thompson - Developer
Stu 'nosnilmot' Tomlinson - Developer
Jorge 'Masca' Villaseñor - Developer
Crazy Patch Writers:
-------------------
Jakub 'haakon' Adam
Krzysztof Klinikowski
Peter 'Fmoo' Ruibal
Gabriel 'Nix' Schulhof
Tomasz Wasilczyk
Retired Developers:
------------------
Herman Bloggs - Win32 Port
Thomas Butter - Developer
Ka-Hing Cheung - Developer
Jim Duchek <jim@linuxpimps.com> - maintainer
Sean Egan - Developer
Rob Flynn <gaim@robflynn.com> - maintainer
Adam Fritzler - libfaim maintainer
Christian 'ChipX86' Hammond - Developer & Webmaster
Syd Logan - hacker and designated driver [lazy bum]
Christopher 'siege' O'Brien - Developer
Bartosz Oler - Developer
Tim 'marv' Ringenbach - Developer
Megan 'Cae' Schneider - support/QA
Jim Seymour - XMPP developer
Mark Spencer <markster@marko.net> - original author
Nathan 'faceprint' Walp - Developer
Eric Warmenhoven <eric@warmenhoven.org> - lead developer
Retired Crazy Patch Writers:
---------------------------
Felipe 'shx' Contreras
Decklin Foster
Dennis 'EvilDennisR' Ristuccia - Senior Contributor/QA
Peter 'Bleeter' Lawler
Robert 'Robot101' McQueen
Benjamin Miller
Artists:
-------
Hylke Bons - Icons
Other Contributions:
-------------------
Much thanks to Evan Martin <martine@cs.washington.edu> for writing
GtkSpell <http://gtkspell.sourceforge.net> responsible for the
"Highlight misspelled words" feature and for gtk-nativewin
<http://bunny.darktech.org/cvs/gtk-nativewin/> the default GTK+-2.0
engine originally used in our win32 port.
** ORIGINAL LOGO DESIGNED BY: Naru Sundar **
Peter Teichiman <peter@helixcode.com>
Larry Ewing
Jeramey A. Crawford
Thanks to these boys. Peter and Larry managed to stomp
out a large list of Mem Leaks. Jeramey found the remaining
onees and pointed me to those. Props to the boys at
Helix Code. Thanks guys.
Nathan Walp
A healthy amount of patches for the Jabber plugin
Neil Sanchala
Wrote most of the Zephyr plugin
Arkadiusz Miskiewicz
Wrote the Gadu-Gadu plugin
David Prater <IM: dRaven43> draven@tcsx.net
Log and Colour Button Images
Sébastien Carpe <IM: Seb Carpe>
Base HTTP Proxy Support
Ari Pollak <IM: Ari Pollak> compwiz.dhs.org
Resize conversation window patch
Decklin Foster
Many GUI improvements, other nifty additions and fixes
David <IM: CrazyDavy>
The neato-bigger text box
S D Erle
Writing a cool perl script to translate WinAIM lists to gaim
BMiller
A good collection of stuff. %n for away messages, import winaim
lists, pic/text/pic+text for buttons, among others
Lance Rocker
Improved HTML formatting in logs, plus lots of debugging on *BSD.
ergofobe:
GNOME Url handler patch
Justin M. Ward <justin@yossman.net>:
Alphabetical Away Messages patch
G. Sumner Hayes <IM: SumnerFool> Security Patches
Brian Ryner for a little make file patch :)
Ryan C. Gordon - I still think you look like Silent Bob.
Elliot Tobin <elliot@bha.udel.edu>
Thanks to Jeroen van der Vegt for the initial smiley plugin and images.
The OpenQ Team
Wrote the QQ plugin dropped in 2.8.0 (see libpurple/qq/AUTHORS in 2.7.11)