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

Sep 18
2007 17:49 (ASP.NET, Программирование, Facebook) · English (5,162 views)

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

// 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 перед тем, как писать библиотеки, используемые другими людьми? Что-то мне подсказывает, что нет.

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

// 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:

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

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

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

Tagged , , ,

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

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

1
сказал 19.09.2007 в 9.37

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

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

2
сказал 19.09.2007 в 10.32

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

3
сказал 19.09.2007 в 10.43

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

4
COTOHA
сказал 19.09.2007 в 10.57

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

5
сказал 19.09.2007 в 14.10

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

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

6
сказал 21.09.2007 в 8.22

[...] опубликовал статью с довольно интересным названием: “Что за хрень? Разработчики клиентских библиотек Face…. Я прочитал ее с большим интересом, так как [...]

7
сказал 22.09.2007 в 13.14

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

8
unnamed
сказал 22.09.2007 в 21.56

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

9
bull
сказал 10.11.2007 в 0.53

encountered same bullshit and resolved with same trick…

yeah… whatthefck++;

10
сказал 23.11.2007 в 10.36

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?

11
сказал 23.11.2007 в 12.03

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.

12
Rafal
сказал 14.01.2008 в 22.27

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 ;].

13
Kevin Marshall
сказал 23.01.2008 в 0.46

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.

14
сказал 23.01.2008 в 10.10

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.

Оставить отзыв

Вы можете использовать простые теги форматирования HTML (вроде <a>, <ul> and others). Чтобы вставить пример код, используйте <code lang="php">$a = "hello";</code> (поддерживаемые языки: ruby, php, yaml, html, csharp, javascript). Также Вы можете использовать <code>$a = "hello";</code>, синтаксис не будет подсвечен. Если вы не хотите использовать тег <code>, замените символ < на &lt;.

Отправить

 
Copyright © 2005 - 2008, Dmytro Shteflyuk