{"action":"opened","number":45,"pull_request":{"url":"https://api.github.com/repos/inhabitedtype/httpaf/pulls/45","id":170083549,"html_url":"https://github.com/inhabitedtype/httpaf/pull/45","diff_url":"https://github.com/inhabitedtype/httpaf/pull/45.diff","patch_url":"https://github.com/inhabitedtype/httpaf/pull/45.patch","issue_url":"https://api.github.com/repos/inhabitedtype/httpaf/issues/45","number":45,"state":"open","locked":false,"title":"Fix chunked encoding","user":{"login":"seliopou","id":25269,"avatar_url":"https://avatars1.githubusercontent.com/u/25269?v=4","gravatar_id":"","url":"https://api.github.com/users/seliopou","html_url":"https://github.com/seliopou","followers_url":"https://api.github.com/users/seliopou/followers","following_url":"https://api.github.com/users/seliopou/following{/other_user}","gists_url":"https://api.github.com/users/seliopou/gists{/gist_id}","starred_url":"https://api.github.com/users/seliopou/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/seliopou/subscriptions","organizations_url":"https://api.github.com/users/seliopou/orgs","repos_url":"https://api.github.com/users/seliopou/repos","events_url":"https://api.github.com/users/seliopou/events{/privacy}","received_events_url":"https://api.github.com/users/seliopou/received_events","type":"User","site_admin":false},"body":"The parser failed to properly parse multiple chunks in a chunked encoding. This was due to a few different problems with the parser, which was ultimately a result of bad testing input in the test simulator. The bugs on the parsing side were:\r\n\r\n* chunked request bodies were being closed prematurely by the `fixed` parser;\r\n* the `CRLF` at the end of each chunk was not being consumed; and\r\n* the parser was (incorrectly) expecting a `CRLF` after the final chunk.\r\n\r\nThere was a corresponding serialization side, in which chunked bodies were not emitting the final `0\\r\\n` chunk.\r\n\r\nThis pull request all of these bugs at once, as they're somewhat interrelated. See commit messages for a bit more detail.","created_at":"2018-02-20T01:29:45Z","updated_at":"2018-02-20T01:29:45Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/inhabitedtype/httpaf/pulls/45/commits","review_comments_url":"https://api.github.com/repos/inhabitedtype/httpaf/pulls/45/comments","review_comment_url":"https://api.github.com/repos/inhabitedtype/httpaf/pulls/comments{/number}","comments_url":"https://api.github.com/repos/inhabitedtype/httpaf/issues/45/comments","statuses_url":"https://api.github.com/repos/inhabitedtype/httpaf/statuses/ab71139600abfcb683874c2a292479eb1e845708","head":{"label":"inhabitedtype:fix-chunked-encoding","ref":"fix-chunked-encoding","sha":"ab71139600abfcb683874c2a292479eb1e845708","user":{"login":"inhabitedtype","id":9289451,"avatar_url":"https://avatars0.githubusercontent.com/u/9289451?v=4","gravatar_id":"","url":"https://api.github.com/users/inhabitedtype","html_url":"https://github.com/inhabitedtype","followers_url":"https://api.github.com/users/inhabitedtype/followers","following_url":"https://api.github.com/users/inhabitedtype/following{/other_user}","gists_url":"https://api.github.com/users/inhabitedtype/gists{/gist_id}","starred_url":"https://api.github.com/users/inhabitedtype/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/inhabitedtype/subscriptions","organizations_url":"https://api.github.com/users/inhabitedtype/orgs","repos_url":"https://api.github.com/users/inhabitedtype/repos","events_url":"https://api.github.com/users/inhabitedtype/events{/privacy}","received_events_url":"https://api.github.com/users/inhabitedtype/received_events","type":"Organization","site_admin":false},"repo":{"id":71267311,"name":"httpaf","full_name":"inhabitedtype/httpaf","owner":{"login":"inhabitedtype","id":9289451,"avatar_url":"https://avatars0.githubusercontent.com/u/9289451?v=4","gravatar_id":"","url":"https://api.github.com/users/inhabitedtype","html_url":"https://github.com/inhabitedtype","followers_url":"https://api.github.com/users/inhabitedtype/followers","following_url":"https://api.github.com/users/inhabitedtype/following{/other_user}","gists_url":"https://api.github.com/users/inhabitedtype/gists{/gist_id}","starred_url":"https://api.github.com/users/inhabitedtype/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/inhabitedtype/subscriptions","organizations_url":"https://api.github.com/users/inhabitedtype/orgs","repos_url":"https://api.github.com/users/inhabitedtype/repos","events_url":"https://api.github.com/users/inhabitedtype/events{/privacy}","received_events_url":"https://api.github.com/users/inhabitedtype/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/inhabitedtype/httpaf","description":"A high performance, memory efficient, and scalable web server written in OCaml","fork":false,"url":"https://api.github.com/repos/inhabitedtype/httpaf","forks_url":"https://api.github.com/repos/inhabitedtype/httpaf/forks","keys_url":"https://api.github.com/repos/inhabitedtype/httpaf/keys{/key_id}","collaborators_url":"https://api.github.com/repos/inhabitedtype/httpaf/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/inhabitedtype/httpaf/teams","hooks_url":"https://api.github.com/repos/inhabitedtype/httpaf/hooks","issue_events_url":"https://api.github.com/repos/inhabitedtype/httpaf/issues/events{/number}","events_url":"https://api.github.com/repos/inhabitedtype/httpaf/events","assignees_url":"https://api.github.com/repos/inhabitedtype/httpaf/assignees{/user}","branches_url":"https://api.github.com/repos/inhabitedtype/httpaf/branches{/branch}","tags_url":"https://api.github.com/repos/inhabitedtype/httpaf/tags","blobs_url":"https://api.github.com/repos/inhabitedtype/httpaf/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/inhabitedtype/httpaf/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/inhabitedtype/httpaf/git/refs{/sha}","trees_url":"https://api.github.com/repos/inhabitedtype/httpaf/git/trees{/sha}","statuses_url":"https://api.github.com/repos/inhabitedtype/httpaf/statuses/{sha}","languages_url":"https://api.github.com/repos/inhabitedtype/httpaf/languages","stargazers_url":"https://api.github.com/repos/inhabitedtype/httpaf/stargazers","contributors_url":"https://api.github.com/repos/inhabitedtype/httpaf/contributors","subscribers_url":"https://api.github.com/repos/inhabitedtype/httpaf/subscribers","subscription_url":"https://api.github.com/repos/inhabitedtype/httpaf/subscription","commits_url":"https://api.github.com/repos/inhabitedtype/httpaf/commits{/sha}","git_commits_url":"https://api.github.com/repos/inhabitedtype/httpaf/git/commits{/sha}","comments_url":"https://api.github.com/repos/inhabitedtype/httpaf/comments{/number}","issue_comment_url":"https://api.github.com/repos/inhabitedtype/httpaf/issues/comments{/number}","contents_url":"https://api.github.com/repos/inhabitedtype/httpaf/contents/{+path}","compare_url":"https://api.github.com/repos/inhabitedtype/httpaf/compare/{base}...{head}","merges_url":"https://api.github.com/repos/inhabitedtype/httpaf/merges","archive_url":"https://api.github.com/repos/inhabitedtype/httpaf/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/inhabitedtype/httpaf/downloads","issues_url":"https://api.github.com/repos/inhabitedtype/httpaf/issues{/number}","pulls_url":"https://api.github.com/repos/inhabitedtype/httpaf/pulls{/number}","milestones_url":"https://api.github.com/repos/inhabitedtype/httpaf/milestones{/number}","notifications_url":"https://api.github.com/repos/inhabitedtype/httpaf/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/inhabitedtype/httpaf/labels{/name}","releases_url":"https://api.github.com/repos/inhabitedtype/httpaf/releases{/id}","deployments_url":"https://api.github.com/repos/inhabitedtype/httpaf/deployments","created_at":"2016-10-18T16:15:41Z","updated_at":"2018-02-20T00:21:47Z","pushed_at":"2018-02-20T01:26:01Z","git_url":"git://github.com/inhabitedtype/httpaf.git","ssh_url":"git@github.com:inhabitedtype/httpaf.git","clone_url":"https://github.com/inhabitedtype/httpaf.git","svn_url":"https://github.com/inhabitedtype/httpaf","homepage":null,"size":374,"stargazers_count":95,"watchers_count":95,"language":"OCaml","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":5,"mirror_url":null,"archived":false,"open_issues_count":7,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause"},"forks":5,"open_issues":7,"watchers":95,"default_branch":"master"}},"base":{"label":"inhabitedtype:master","ref":"master","sha":"00ff6449067d14113dcace0ff904976f0d628227","user":{"login":"inhabitedtype","id":9289451,"avatar_url":"https://avatars0.githubusercontent.com/u/9289451?v=4","gravatar_id":"","url":"https://api.github.com/users/inhabitedtype","html_url":"https://github.com/inhabitedtype","followers_url":"https://api.github.com/users/inhabitedtype/followers","following_url":"https://api.github.com/users/inhabitedtype/following{/other_user}","gists_url":"https://api.github.com/users/inhabitedtype/gists{/gist_id}","starred_url":"https://api.github.com/users/inhabitedtype/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/inhabitedtype/subscriptions","organizations_url":"https://api.github.com/users/inhabitedtype/orgs","repos_url":"https://api.github.com/users/inhabitedtype/repos","events_url":"https://api.github.com/users/inhabitedtype/events{/privacy}","received_events_url":"https://api.github.com/users/inhabitedtype/received_events","type":"Organization","site_admin":false},"repo":{"id":71267311,"name":"httpaf","full_name":"inhabitedtype/httpaf","owner":{"login":"inhabitedtype","id":9289451,"avatar_url":"https://avatars0.githubusercontent.com/u/9289451?v=4","gravatar_id":"","url":"https://api.github.com/users/inhabitedtype","html_url":"https://github.com/inhabitedtype","followers_url":"https://api.github.com/users/inhabitedtype/followers","following_url":"https://api.github.com/users/inhabitedtype/following{/other_user}","gists_url":"https://api.github.com/users/inhabitedtype/gists{/gist_id}","starred_url":"https://api.github.com/users/inhabitedtype/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/inhabitedtype/subscriptions","organizations_url":"https://api.github.com/users/inhabitedtype/orgs","repos_url":"https://api.github.com/users/inhabitedtype/repos","events_url":"https://api.github.com/users/inhabitedtype/events{/privacy}","received_events_url":"https://api.github.com/users/inhabitedtype/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/inhabitedtype/httpaf","description":"A high performance, memory efficient, and scalable web server written in OCaml","fork":false,"url":"https://api.github.com/repos/inhabitedtype/httpaf","forks_url":"https://api.github.com/repos/inhabitedtype/httpaf/forks","keys_url":"https://api.github.com/repos/inhabitedtype/httpaf/keys{/key_id}","collaborators_url":"https://api.github.com/repos/inhabitedtype/httpaf/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/inhabitedtype/httpaf/teams","hooks_url":"https://api.github.com/repos/inhabitedtype/httpaf/hooks","issue_events_url":"https://api.github.com/repos/inhabitedtype/httpaf/issues/events{/number}","events_url":"https://api.github.com/repos/inhabitedtype/httpaf/events","assignees_url":"https://api.github.com/repos/inhabitedtype/httpaf/assignees{/user}","branches_url":"https://api.github.com/repos/inhabitedtype/httpaf/branches{/branch}","tags_url":"https://api.github.com/repos/inhabitedtype/httpaf/tags","blobs_url":"https://api.github.com/repos/inhabitedtype/httpaf/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/inhabitedtype/httpaf/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/inhabitedtype/httpaf/git/refs{/sha}","trees_url":"https://api.github.com/repos/inhabitedtype/httpaf/git/trees{/sha}","statuses_url":"https://api.github.com/repos/inhabitedtype/httpaf/statuses/{sha}","languages_url":"https://api.github.com/repos/inhabitedtype/httpaf/languages","stargazers_url":"https://api.github.com/repos/inhabitedtype/httpaf/stargazers","contributors_url":"https://api.github.com/repos/inhabitedtype/httpaf/contributors","subscribers_url":"https://api.github.com/repos/inhabitedtype/httpaf/subscribers","subscription_url":"https://api.github.com/repos/inhabitedtype/httpaf/subscription","commits_url":"https://api.github.com/repos/inhabitedtype/httpaf/commits{/sha}","git_commits_url":"https://api.github.com/repos/inhabitedtype/httpaf/git/commits{/sha}","comments_url":"https://api.github.com/repos/inhabitedtype/httpaf/comments{/number}","issue_comment_url":"https://api.github.com/repos/inhabitedtype/httpaf/issues/comments{/number}","contents_url":"https://api.github.com/repos/inhabitedtype/httpaf/contents/{+path}","compare_url":"https://api.github.com/repos/inhabitedtype/httpaf/compare/{base}...{head}","merges_url":"https://api.github.com/repos/inhabitedtype/httpaf/merges","archive_url":"https://api.github.com/repos/inhabitedtype/httpaf/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/inhabitedtype/httpaf/downloads","issues_url":"https://api.github.com/repos/inhabitedtype/httpaf/issues{/number}","pulls_url":"https://api.github.com/repos/inhabitedtype/httpaf/pulls{/number}","milestones_url":"https://api.github.com/repos/inhabitedtype/httpaf/milestones{/number}","notifications_url":"https://api.github.com/repos/inhabitedtype/httpaf/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/inhabitedtype/httpaf/labels{/name}","releases_url":"https://api.github.com/repos/inhabitedtype/httpaf/releases{/id}","deployments_url":"https://api.github.com/repos/inhabitedtype/httpaf/deployments","created_at":"2016-10-18T16:15:41Z","updated_at":"2018-02-20T00:21:47Z","pushed_at":"2018-02-20T01:26:01Z","git_url":"git://github.com/inhabitedtype/httpaf.git","ssh_url":"git@github.com:inhabitedtype/httpaf.git","clone_url":"https://github.com/inhabitedtype/httpaf.git","svn_url":"https://github.com/inhabitedtype/httpaf","homepage":null,"size":374,"stargazers_count":95,"watchers_count":95,"language":"OCaml","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":5,"mirror_url":null,"archived":false,"open_issues_count":7,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause"},"forks":5,"open_issues":7,"watchers":95,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/inhabitedtype/httpaf/pulls/45"},"html":{"href":"https://github.com/inhabitedtype/httpaf/pull/45"},"issue":{"href":"https://api.github.com/repos/inhabitedtype/httpaf/issues/45"},"comments":{"href":"https://api.github.com/repos/inhabitedtype/httpaf/issues/45/comments"},"review_comments":{"href":"https://api.github.com/repos/inhabitedtype/httpaf/pulls/45/comments"},"review_comment":{"href":"https://api.github.com/repos/inhabitedtype/httpaf/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/inhabitedtype/httpaf/pulls/45/commits"},"statuses":{"href":"https://api.github.com/repos/inhabitedtype/httpaf/statuses/ab71139600abfcb683874c2a292479eb1e845708"}},"author_association":"OWNER","merged":false,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":null,"comments":0,"review_comments":0,"maintainer_can_modify":false,"commits":6,"additions":172,"deletions":114,"changed_files":9}}
{"actor":{"display_login":"seliopou"}}