Что за хрень? Разработчики клиентских библиотек Facebook для ASP.NET глупы?

(ASP.NET, Facebook) · English (13,528 views)

На прошлой неделе я столкнулся со странным багом в Facebook Developer Toolkit. При попытке вызвать метод setFBML (я рассказывал о нем в моей предыдущей заметке), я поймал исключение о неправильной подписи (invalid signature). “Ха-ха”,– сказал я и скачал исходники библиотеки. Немного подебажив, я нашел несколько строк, которые просто убили меня:

1
2
3
// Compute the MD5 hash of the signature builder
hash = md5.ComputeHash(Encoding.Default.GetBytes(
                           signatureBuilder.ToString().Trim()));

Просто взгляните на топик в MSDN о Encoding.Default: Получает кодировку для текущей кодовой страницы системы. И ниже мы натыкаемся на предупреждение:

Разные системы могут использовать разные кодировки по умолчанию, поэтому данные, передаваемые из одной системы в другую, могут быть преобразованы неправильно. Чтобы убедиться, что закодированные байты раскодируются правильно, используйте кодировку Unicode (это UTF8Encoding, UnicodeEncoding или UTF32Encoding). Другой вариант — использовать протокол более высокого уровня, чтобы убедиться в том, что используется одинаковый формат для кодирования и раскодирования.

Боже мой! Ребята, вы вообще читали MSDN перед тем, как писать библиотеки, используемые другими людьми? Что-то мне подсказывает, что нет.

В любом случае, я исправил локальную копию:

1
2
3
// Compute the MD5 hash of the signature builder
hash = md5.ComputeHash(Encoding.UTF8.GetBytes(
                           signatureBuilder.ToString().Trim()));

Естественно, все чудненько заработало. Я запостил баг в трекер, и решил посмотреть на Facebook.NET, более продвинутую и прозрачную реализацию, как заявляет AjaxNinja.

И что вы думаете? Просто откройте метод CreateSignature в файле Framework/Service/Core/FacebookRequestParameterList.cs:

1
byte[] hash = md5.ComputeHash(Encoding.Default.GetBytes(sigBuilder.ToString()));

Аааааааааа. Они съели мой моск! Я не знаю, что делать. Я не знаю, как объяснить всем разработчикам о кодовых страницах с не-ASCII символами. Мы живем в неидеальном мире. У нас есть куча языков, кодировок, кодовых страниц. И у нас есть UTF8, который должен упростить нашу жизнь. Эй, чуваки, шозанах?

Обновлено 23 сентября 2007: разработчики Facebook.NET закрыли этот баг. Надеюсь, я никогда не увижу чего-то вроде этого. Facebook Development Toolkit до сих пор не работает. Я насчитал 27 открытых багов в трекере этой библиотеке, потому решил использовать Facebook.NET.

15 Responses to this entry

Subscribe to comments with RSS

said on 19.09.2007 at 9.37 · Permalink

нихуя не понял :)

чего кричим? :)

said on 19.09.2007 at 10.32 · Permalink

Кричим потому что автор судя по всему впервые нашел ошибку в публичной библиотеке – вот и пребывает в ейфорическом настроениеи по этому поводу.

said on 19.09.2007 at 10.43 · Permalink

Если бы в первый… И если бы только в одной библиотеке… Просто очень бесит, когда буржуйские товарищи забывают про то, что они не одни на планете. Уже тыщу миллионов раз писалось про кодировки, про юникод и все остальное. И тут на тебе. Обе более-менее приличные библиотеки Facebook с таким дурацким багом.

COTOHA
said on 19.09.2007 at 10.57 · Permalink

а чё они должны про вас помнить? :) денег-то платят в основном буржуины за он-лайн сервисы, вот на целевую аудиторию и работают.

said on 19.09.2007 at 14.10 · Permalink

со своей колокольни лучше видно, а попади в такую ситуацию – тоже кричал бы ;)

З.Ы. Я и сам находил ошибки в либах Facebook, но под PHP

Q-Zma @
said on 22.09.2007 at 13.14 · Permalink

это нормальная практика, “они” там думают, что кроме них самих это больше никому не понадобится :)
когда-то столкнулся с подобной проблемой в NuSOAP, там тупо utf-8 сливался в Latin-1 при этом все нелатинские символы превращались в вопросительные знаки… :)

unnamed
said on 22.09.2007 at 21.56 · Permalink

Тоже находил ошибки в клиенте для фейсбука и под 4-й и под 5-й пхп. В первых версиях либы для пхп4 приходилось убирать куски try catch =/

bull
said on 10.11.2007 at 0.53 · Permalink

encountered same bullshit and resolved with same trick…

yeah… whatthefck++;

said on 23.11.2007 at 10.36 · Permalink

I just happened upon this post from a link on the Facebook Developer’s Forum and I find a link to my blog lol! How’ve you liked Facebook.NET so far? I like it way better than the Facebook Developer Toolkit, although I have had to make my own hacks similar to yours (I actually blogged about it today) in order to get some of the functionality I need out of Facebook.NET.

Are you still developing FB applications in .NET?

said on 23.11.2007 at 12.03 · Permalink

Hi, Aaronontheweb
First of all, thank you for your blog :-)
I like Facebook.NET, except one thing: Nikhil hides results of the Facebook web-service call (right, you have blogged about this already). Anyway, it’s much better than Developer Toolkit as for me :-)

PS. Yes, I’m working currently on Facebook application. Hope, it will be finished soon, so I will blog about it.

Rafal
said on 14.01.2008 at 22.27 · Permalink

LOOL, mate!
This is great! I wish people like you were creating this sort of libraries. The other option is to create everything from scratch. I had to do the same thing with the protx.com protocol as the guys that are responsible for it created some kind of a monster ;].

Kevin Marshall @
said on 23.01.2008 at 0.46 · Permalink

I admit I’m somewhat defensive since I worked on the Facebook Developer Toolkit, but in the time it took you to complain about the bug you could have fixed it. That’s kind of the point of open source software, use it and contribute back to it.

Oh wait, you did fix it on your local copy. That’s helpful.

I haven’t worked on it since the original release, but dozens of other developers have spent their own free time working on it. Being a dick about it really isn’t helpful to the community development effort.

Great, you’re smarter than the rest of us and write better code. Congrats.

said on 23.01.2008 at 10.10 · Permalink

Hey Kevin,

As you could see, I have posted a bug to the Facebook Developer Toolkit bug tracker, along with fix. So maybe I’m dick, but I have tried to help community to build better software.

Comments are closed

Comments for this entry are closed for a while. If you have anything to say – use a contact form. Thank you for your patience.