Last week I faced strange bug in Facebook Developer Toolkit. When I tried to call setFBML method (I mentioned it in my previous post) I’ve got an exception about invalid signature. “Haha” I said and downloaded toolkit sources. After some debugging, I’ve found a few lines which just killed me:
1 2 3 | // Compute the MD5 hash of the signature builder hash = md5.ComputeHash(Encoding.Default.GetBytes( signatureBuilder.ToString().Trim())); |
Just take a look into the MSDN’s topic about Encoding.Default: Gets an encoding for the system’s current ANSI code page. And below we can find Caution:
Different systems might use different encodings as the default; therefore, data streamed from one system to another might be translated incorrectly. To ensure that the encoded bytes are decoded properly, use a Unicode encoding (that is, UTF8Encoding, UnicodeEncoding, or UTF32Encoding) with a preamble. Another option is to use a higher level protocol to ensure that the same format is used for encoding and decoding.
Holly shit! Guys, did you read MSDN before writing libraries for others to use? I think you didn’t.
Anyways, I have fixed my local copy:
1 2 3 | // Compute the MD5 hash of the signature builder hash = md5.ComputeHash(Encoding.UTF8.GetBytes( signatureBuilder.ToString().Trim())); |
Of course, it started working perfectly. I have posted a bug to the tracker and decided to look at the Facebook.NET, a better and much cleaner implementation according to AjaxNinja.
And what do you think? Just open CreateSignature method in Framework/Service/Core/FacebookRequestParameterList.cs file:
1 | byte[] hash = md5.ComputeHash(Encoding.Default.GetBytes(sigBuilder.ToString())); |
Craaaaaaaaaaap. My brain exploded! I don’t know what to do. I don’t know, how to explain to all developers about non-ASCII code pages. We are living in world that is not ideal. We have tons of languages, encodings, code pages. And we have UTF8, which should simplify our life. Hey, guys, WTF?
Updated 23 Sep 2007: Facebook.NET developers has closed this bug. Hope I will never see something like this again. Facebook Development Toolkit still does not working for me. I see 27 open bugs in its tracker, so I decided to use Facebook.NET.
нихуя не понял :)
чего кричим? :)
Кричим потому что автор судя по всему впервые нашел ошибку в публичной библиотеке – вот и пребывает в ейфорическом настроениеи по этому поводу.
Если бы в первый… И если бы только в одной библиотеке… Просто очень бесит, когда буржуйские товарищи забывают про то, что они не одни на планете. Уже тыщу миллионов раз писалось про кодировки, про юникод и все остальное. И тут на тебе. Обе более-менее приличные библиотеки 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.
[…] названия статьи, которая начинается со слов “Что за хрень…“. Действительно, а как ещё перевести слово […]