[twitter-dev] API Bug: Malformed JSON returned for some requests

2011-07-05 Thread Idan Gazit
*Full bug report is here: https://gist.github.com/1064338*


Summary:

The Twitter API returns malformed JSON for some valid requests.

I discovered this while attempting to fetch all of my list memberships via 
the API. The issue is present regardless of authentication. It occurs 100% 
of the time, and has persisted for over twelve hours. I have reproduced it 
for multiple users.

Note that the response does not indicate any error condition. The 
transaction completes successfully, but the payload is malformed.

It seems that any user with enough lists will eventually have a page 
returned containing this bug. I've located it on the first two users I 
tried, which is my own account (@idangazit ~120 listed) and that of Jacob 
Kaplan-Moss (@jacobian, ~500 listed), founder of the Django web framework.

The offending queries:

These are two examples:

http://api.twitter.com/1/idangazit/lists/memberships.json?cursor=1336796671888485791

http://api.twitter.com/1/jacobian/lists/memberships.json?cursor=1343747472518328819

Note that these are literally the first two users I inspected. I imagine 
this bug affects anybody with a sufficient number of lists. I have not 
encountered the issue in any other API call, but I haven't looked very hard, 
either.

All of the following applies to my account, but is equally reproducible for 
@jacobian, albeit with different values.

Starting with cursor=-1, the following (stable) progression of next_cursor 
values 
lead to the broken query result:

   - 2nd: 1370876429079454131
   - 3rd: 1363944001883709517
   - 4th: 1352913498669071334
   - 5th: 1336796671888485791

Each of the requests leading up to the offender return well-formed JSON.

The problem is a superfluous empty value at the very end of the lists 
value, more easily seen on line 956 of the pretty-printed JSON attached to 
this gist. Pasting the JSON into a validity checker like http://jsonlint.com 
handily 
points out the invalid serialization.

Interestingly, the developer console in Twitter for Mac munges the response 
to replace the trailing comma with null, thereby making it valid JSON 
(screenshot:http://cl.ly/1q072g380B0P3g213t3e). Regardless, the bytestream 
from the server contains invalid JSON.


Raw and pretty-printed dumps of the transaction are available in the gist 
linked at the top of this post.


Thanks!

Idan (@idangazit)

-- 
Twitter developer documentation and resources: https://dev.twitter.com/doc
API updates via Twitter: https://twitter.com/twitterapi
Issues/Enhancements Tracker: https://code.google.com/p/twitter-api/issues/list
Change your membership to this group: 
https://groups.google.com/forum/#!forum/twitter-development-talk


Re: [twitter-dev] API Bug: Malformed JSON returned for some requests

2011-07-05 Thread Taylor Singletary
Hi Idan,

Thank you very much for your detailed bug report. We're working on
identifying the underlying cause and hope to have a fix out for this next
week.

Thanks,
@episod http://twitter.com/intent/user?screen_name=episod - Taylor
Singletary


On Tue, Jul 5, 2011 at 12:41 AM, Idan Gazit i...@gazit.me wrote:

 *Full bug report is here: https://gist.github.com/1064338*


 Summary:

 The Twitter API returns malformed JSON for some valid requests.

 I discovered this while attempting to fetch all of my list memberships via
 the API. The issue is present regardless of authentication. It occurs 100%
 of the time, and has persisted for over twelve hours. I have reproduced it
 for multiple users.

 Note that the response does not indicate any error condition. The
 transaction completes successfully, but the payload is malformed.

 It seems that any user with enough lists will eventually have a page
 returned containing this bug. I've located it on the first two users I
 tried, which is my own account (@idangazit ~120 listed) and that of Jacob
 Kaplan-Moss (@jacobian, ~500 listed), founder of the Django web framework.

 The offending queries:

 These are two examples:


 http://api.twitter.com/1/idangazit/lists/memberships.json?cursor=1336796671888485791


 http://api.twitter.com/1/jacobian/lists/memberships.json?cursor=1343747472518328819

 Note that these are literally the first two users I inspected. I imagine
 this bug affects anybody with a sufficient number of lists. I have not
 encountered the issue in any other API call, but I haven't looked very hard,
 either.

 All of the following applies to my account, but is equally reproducible for
 @jacobian, albeit with different values.

 Starting with cursor=-1, the following (stable) progression of next_cursor 
 values
 lead to the broken query result:

- 2nd: 1370876429079454131
- 3rd: 1363944001883709517
- 4th: 1352913498669071334
- 5th: 1336796671888485791

 Each of the requests leading up to the offender return well-formed JSON.

 The problem is a superfluous empty value at the very end of the lists
 value, more easily seen on line 956 of the pretty-printed JSON attached to
 this gist. Pasting the JSON into a validity checker like
 http://jsonlint.com handily points out the invalid serialization.

 Interestingly, the developer console in Twitter for Mac munges the response
 to replace the trailing comma with null, thereby making it valid JSON
 (screenshot:http://cl.ly/1q072g380B0P3g213t3e). Regardless, the bytestream
 from the server contains invalid JSON.


 Raw and pretty-printed dumps of the transaction are available in the gist
 linked at the top of this post.


 Thanks!

 Idan (@idangazit)

 --
 Twitter developer documentation and resources: https://dev.twitter.com/doc
 API updates via Twitter: https://twitter.com/twitterapi
 Issues/Enhancements Tracker:
 https://code.google.com/p/twitter-api/issues/list
 Change your membership to this group:
 https://groups.google.com/forum/#!forum/twitter-development-talk


-- 
Twitter developer documentation and resources: https://dev.twitter.com/doc
API updates via Twitter: https://twitter.com/twitterapi
Issues/Enhancements Tracker: https://code.google.com/p/twitter-api/issues/list
Change your membership to this group: 
https://groups.google.com/forum/#!forum/twitter-development-talk