{"action":"closed","number":206,"pull_request":{"url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/pulls/206","id":63479187,"html_url":"https://github.com/schmittjoh/JMSSecurityExtraBundle/pull/206","diff_url":"https://github.com/schmittjoh/JMSSecurityExtraBundle/pull/206.diff","patch_url":"https://github.com/schmittjoh/JMSSecurityExtraBundle/pull/206.patch","issue_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/issues/206","number":206,"state":"closed","locked":false,"title":"Verify written cache with graceful fallback","user":{"login":"jaymecd","id":824109,"avatar_url":"https://avatars.githubusercontent.com/u/824109?v=3","gravatar_id":"","url":"https://api.github.com/users/jaymecd","html_url":"https://github.com/jaymecd","followers_url":"https://api.github.com/users/jaymecd/followers","following_url":"https://api.github.com/users/jaymecd/following{/other_user}","gists_url":"https://api.github.com/users/jaymecd/gists{/gist_id}","starred_url":"https://api.github.com/users/jaymecd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jaymecd/subscriptions","organizations_url":"https://api.github.com/users/jaymecd/orgs","repos_url":"https://api.github.com/users/jaymecd/repos","events_url":"https://api.github.com/users/jaymecd/events{/privacy}","received_events_url":"https://api.github.com/users/jaymecd/received_events","type":"User","site_admin":false},"body":"Severity: critical\r\n\r\nWithin massive traffic and concurrent requests (**nginx + php5-fpm**), \r\ncache file is created with 0 size.\r\nNext requests load empty file, what causes ACCESS_DENIED.\r\n\r\nThis PR checks if exact amount of bytes were written to cache file \r\nto avoid being locked by empty file during race condition. \r\nNon-blocking I/O is done by `writing tmpfile` + `rename()` afterwards.\r\nIf failed, fallbacks gracefully to `eval($source)`.\r\n\r\n[Benchmark](https://3v4l.org/eA9aJ), why to `eval($source)` instead of `require $file` after cache has been written.\r\n\r\nAffected versions **^1.2**\r\nTested version: **^1.5**\r\nRequired to fix versions: at least **^1.5**\r\n","created_at":"2016-03-19T21:25:25Z","updated_at":"2016-05-10T15:07:25Z","closed_at":"2016-05-10T15:07:25Z","merged_at":"2016-05-10T15:07:25Z","merge_commit_sha":"df12cd85ec422696f7be46486f5216f00c0cdf3c","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/pulls/206/commits","review_comments_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/pulls/206/comments","review_comment_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/pulls/comments{/number}","comments_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/issues/206/comments","statuses_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/statuses/f5753877ee2771c1b7a00a4966783019fa42583c","head":{"label":"jaymecd:avoid_emty_cache_lock","ref":"avoid_emty_cache_lock","sha":"f5753877ee2771c1b7a00a4966783019fa42583c","user":{"login":"jaymecd","id":824109,"avatar_url":"https://avatars.githubusercontent.com/u/824109?v=3","gravatar_id":"","url":"https://api.github.com/users/jaymecd","html_url":"https://github.com/jaymecd","followers_url":"https://api.github.com/users/jaymecd/followers","following_url":"https://api.github.com/users/jaymecd/following{/other_user}","gists_url":"https://api.github.com/users/jaymecd/gists{/gist_id}","starred_url":"https://api.github.com/users/jaymecd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jaymecd/subscriptions","organizations_url":"https://api.github.com/users/jaymecd/orgs","repos_url":"https://api.github.com/users/jaymecd/repos","events_url":"https://api.github.com/users/jaymecd/events{/privacy}","received_events_url":"https://api.github.com/users/jaymecd/received_events","type":"User","site_admin":false},"repo":{"id":54283483,"name":"JMSSecurityExtraBundle","full_name":"jaymecd/JMSSecurityExtraBundle","owner":{"login":"jaymecd","id":824109,"avatar_url":"https://avatars.githubusercontent.com/u/824109?v=3","gravatar_id":"","url":"https://api.github.com/users/jaymecd","html_url":"https://github.com/jaymecd","followers_url":"https://api.github.com/users/jaymecd/followers","following_url":"https://api.github.com/users/jaymecd/following{/other_user}","gists_url":"https://api.github.com/users/jaymecd/gists{/gist_id}","starred_url":"https://api.github.com/users/jaymecd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jaymecd/subscriptions","organizations_url":"https://api.github.com/users/jaymecd/orgs","repos_url":"https://api.github.com/users/jaymecd/repos","events_url":"https://api.github.com/users/jaymecd/events{/privacy}","received_events_url":"https://api.github.com/users/jaymecd/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jaymecd/JMSSecurityExtraBundle","description":"Enhances the Symfony2 Security Component with several new features","fork":true,"url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle","forks_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/forks","keys_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/teams","hooks_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/hooks","issue_events_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/issues/events{/number}","events_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/events","assignees_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/assignees{/user}","branches_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/branches{/branch}","tags_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/tags","blobs_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/git/refs{/sha}","trees_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/statuses/{sha}","languages_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/languages","stargazers_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/stargazers","contributors_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/contributors","subscribers_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/subscribers","subscription_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/subscription","commits_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/commits{/sha}","git_commits_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/git/commits{/sha}","comments_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/comments{/number}","issue_comment_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/issues/comments{/number}","contents_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/contents/{+path}","compare_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/merges","archive_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/downloads","issues_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/issues{/number}","pulls_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/pulls{/number}","milestones_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/milestones{/number}","notifications_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/labels{/name}","releases_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/releases{/id}","deployments_url":"https://api.github.com/repos/jaymecd/JMSSecurityExtraBundle/deployments","created_at":"2016-03-19T19:29:48Z","updated_at":"2016-03-19T19:29:49Z","pushed_at":"2016-04-14T12:20:23Z","git_url":"git://github.com/jaymecd/JMSSecurityExtraBundle.git","ssh_url":"git@github.com:jaymecd/JMSSecurityExtraBundle.git","clone_url":"https://github.com/jaymecd/JMSSecurityExtraBundle.git","svn_url":"https://github.com/jaymecd/JMSSecurityExtraBundle","homepage":"http://jmsyst.com/bundles/JMSSecurityExtraBundle","size":685,"stargazers_count":0,"watchers_count":0,"language":"PHP","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"schmittjoh:master","ref":"master","sha":"c0147c282f345eee1424a4a42817662f4d4e3875","user":{"login":"schmittjoh","id":197017,"avatar_url":"https://avatars.githubusercontent.com/u/197017?v=3","gravatar_id":"","url":"https://api.github.com/users/schmittjoh","html_url":"https://github.com/schmittjoh","followers_url":"https://api.github.com/users/schmittjoh/followers","following_url":"https://api.github.com/users/schmittjoh/following{/other_user}","gists_url":"https://api.github.com/users/schmittjoh/gists{/gist_id}","starred_url":"https://api.github.com/users/schmittjoh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/schmittjoh/subscriptions","organizations_url":"https://api.github.com/users/schmittjoh/orgs","repos_url":"https://api.github.com/users/schmittjoh/repos","events_url":"https://api.github.com/users/schmittjoh/events{/privacy}","received_events_url":"https://api.github.com/users/schmittjoh/received_events","type":"User","site_admin":false},"repo":{"id":1170846,"name":"JMSSecurityExtraBundle","full_name":"schmittjoh/JMSSecurityExtraBundle","owner":{"login":"schmittjoh","id":197017,"avatar_url":"https://avatars.githubusercontent.com/u/197017?v=3","gravatar_id":"","url":"https://api.github.com/users/schmittjoh","html_url":"https://github.com/schmittjoh","followers_url":"https://api.github.com/users/schmittjoh/followers","following_url":"https://api.github.com/users/schmittjoh/following{/other_user}","gists_url":"https://api.github.com/users/schmittjoh/gists{/gist_id}","starred_url":"https://api.github.com/users/schmittjoh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/schmittjoh/subscriptions","organizations_url":"https://api.github.com/users/schmittjoh/orgs","repos_url":"https://api.github.com/users/schmittjoh/repos","events_url":"https://api.github.com/users/schmittjoh/events{/privacy}","received_events_url":"https://api.github.com/users/schmittjoh/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/schmittjoh/JMSSecurityExtraBundle","description":"Enhances the Symfony2 Security Component with several new features","fork":false,"url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle","forks_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/forks","keys_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/keys{/key_id}","collaborators_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/teams","hooks_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/hooks","issue_events_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/issues/events{/number}","events_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/events","assignees_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/assignees{/user}","branches_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/branches{/branch}","tags_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/tags","blobs_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/git/refs{/sha}","trees_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/git/trees{/sha}","statuses_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/statuses/{sha}","languages_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/languages","stargazers_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/stargazers","contributors_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/contributors","subscribers_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/subscribers","subscription_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/subscription","commits_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/commits{/sha}","git_commits_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/git/commits{/sha}","comments_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/comments{/number}","issue_comment_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/issues/comments{/number}","contents_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/contents/{+path}","compare_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/compare/{base}...{head}","merges_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/merges","archive_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/downloads","issues_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/issues{/number}","pulls_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/pulls{/number}","milestones_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/milestones{/number}","notifications_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/labels{/name}","releases_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/releases{/id}","deployments_url":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/deployments","created_at":"2010-12-15T11:12:39Z","updated_at":"2016-05-04T02:32:54Z","pushed_at":"2016-05-10T15:07:25Z","git_url":"git://github.com/schmittjoh/JMSSecurityExtraBundle.git","ssh_url":"git@github.com:schmittjoh/JMSSecurityExtraBundle.git","clone_url":"https://github.com/schmittjoh/JMSSecurityExtraBundle.git","svn_url":"https://github.com/schmittjoh/JMSSecurityExtraBundle","homepage":"http://jmsyst.com/bundles/JMSSecurityExtraBundle","size":762,"stargazers_count":228,"watchers_count":228,"language":"PHP","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":78,"mirror_url":null,"open_issues_count":36,"forks":78,"open_issues":36,"watchers":228,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/pulls/206"},"html":{"href":"https://github.com/schmittjoh/JMSSecurityExtraBundle/pull/206"},"issue":{"href":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/issues/206"},"comments":{"href":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/issues/206/comments"},"review_comments":{"href":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/pulls/206/comments"},"review_comment":{"href":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/pulls/206/commits"},"statuses":{"href":"https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/statuses/f5753877ee2771c1b7a00a4966783019fa42583c"}},"merged":true,"mergeable":null,"mergeable_state":"unknown","merged_by":{"login":"schmittjoh","id":197017,"avatar_url":"https://avatars.githubusercontent.com/u/197017?v=3","gravatar_id":"","url":"https://api.github.com/users/schmittjoh","html_url":"https://github.com/schmittjoh","followers_url":"https://api.github.com/users/schmittjoh/followers","following_url":"https://api.github.com/users/schmittjoh/following{/other_user}","gists_url":"https://api.github.com/users/schmittjoh/gists{/gist_id}","starred_url":"https://api.github.com/users/schmittjoh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/schmittjoh/subscriptions","organizations_url":"https://api.github.com/users/schmittjoh/orgs","repos_url":"https://api.github.com/users/schmittjoh/repos","events_url":"https://api.github.com/users/schmittjoh/events{/privacy}","received_events_url":"https://api.github.com/users/schmittjoh/received_events","type":"User","site_admin":false},"comments":13,"review_comments":4,"commits":1,"additions":93,"deletions":7,"changed_files":2}}