На прошлой неделе я столкнулся со странным багом в Facebook Developer Toolkit. При попытке вызвать метод setFBML (я рассказывал о нем в моей предыдущей заметке), я поймал исключение о неправильной подписи (invalid signature). “Ха-ха”,– сказал я и скачал исходники библиотеки. Немного подебажив, я нашел несколько строк, которые просто убили меня:
hash = md5.ComputeHash(Encoding.Default.GetBytes(
signatureBuilder.ToString().Trim()));
Просто взгляните на топик в MSDN о Encoding.Default: Получает кодировку для текущей кодовой страницы системы. И ниже мы натыкаемся на предупреждение:
Разные системы могут использовать разные кодировки по умолчанию, поэтому данные, передаваемые из одной системы в другую, могут быть преобразованы неправильно. Чтобы убедиться, что закодированные байты раскодируются правильно, используйте кодировку Unicode (это UTF8Encoding, UnicodeEncoding или UTF32Encoding). Другой вариант — использовать протокол более высокого уровня, чтобы убедиться в том, что используется одинаковый формат для кодирования и раскодирования.
Боже мой! Ребята, вы вообще читали MSDN перед тем, как писать библиотеки, используемые другими людьми? Что-то мне подсказывает, что нет.
В любом случае, я исправил локальную копию:
hash = md5.ComputeHash(Encoding.UTF8.GetBytes(
signatureBuilder.ToString().Trim()));
Естественно, все чудненько заработало. Я запостил баг в трекер, и решил посмотреть на Facebook.NET, более продвинутую и прозрачную реализацию, как заявляет AjaxNinja.
И что вы думаете? Просто откройте метод CreateSignature в файле Framework/Service/Core/FacebookRequestParameterList.cs:
Аааааааааа. Они съели мой моск! Я не знаю, что делать. Я не знаю, как объяснить всем разработчикам о кодовых страницах с не-ASCII символами. Мы живем в неидеальном мире. У нас есть куча языков, кодировок, кодовых страниц. И у нас есть UTF8, который должен упростить нашу жизнь. Эй, чуваки, шозанах?
Обновлено 23 сентября 2007: разработчики Facebook.NET закрыли этот баг. Надеюсь, я никогда не увижу чего-то вроде этого. Facebook Development Toolkit до сих пор не работает. Я насчитал 27 открытых багов в трекере этой библиотеке, потому решил использовать Facebook.NET.
Русский
English
нихуя не понял
чего кричим?
Кричим потому что автор судя по всему впервые нашел ошибку в публичной библиотеке - вот и пребывает в ейфорическом настроениеи по этому поводу.
Если бы в первый… И если бы только в одной библиотеке… Просто очень бесит, когда буржуйские товарищи забывают про то, что они не одни на планете. Уже тыщу миллионов раз писалось про кодировки, про юникод и все остальное. И тут на тебе. Обе более-менее приличные библиотеки Facebook с таким дурацким багом.
а чё они должны про вас помнить?
денег-то платят в основном буржуины за он-лайн сервисы, вот на целевую аудиторию и работают.
со своей колокольни лучше видно, а попади в такую ситуацию - тоже кричал бы
З.Ы. Я и сам находил ошибки в либах Facebook, но под PHP
[...] опубликовал статью с довольно интересным названием: “Что за хрень? Разработчики клиентских библиотек Face…. Я прочитал ее с большим интересом, так как [...]
это нормальная практика, “они” там думают, что кроме них самих это больше никому не понадобится

когда-то столкнулся с подобной проблемой в NuSOAP, там тупо utf-8 сливался в Latin-1 при этом все нелатинские символы превращались в вопросительные знаки…
Тоже находил ошибки в клиенте для фейсбука и под 4-й и под 5-й пхп. В первых версиях либы для пхп4 приходилось убирать куски try catch =/
encountered same bullshit and resolved with same trick…
yeah… whatthefck++;
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?
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.
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 ;].
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.
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.