{"action":"created","comment":{"url":"https://api.github.com/repos/reverbrain/eblob/pulls/comments/46050107","id":46050107,"diff_hunk":"@@ -491,6 +695,23 @@ static int eblob_check_disk_one(struct eblob_iterate_local *loc)\n \t\t}\n \t}\n \n+\tif ((ctl->flags & EBLOB_ITERATE_FLAGS_VERIFY_CHECKSUM) &&\n+\t    !(dc->flags & BLOB_DISK_CTL_REMOVE) &&\n+\t    !(dc->flags & BLOB_DISK_CTL_UNCOMMITTED)) {\n+\t\tstruct eblob_write_control wc;\n+\t\tmemset(&wc, 0, sizeof(wc));\n+\t\teblob_rctl_to_wc(&rc, &wc);\n+\t\teblob_dc_to_wc(dc, &wc);\n+\n+\t\terr = eblob_verify_checksum(bc->back, &dc->key, &wc);\n+\t\tif (err) {\n+\t\t\teblob_dump_wc(bc->back, &dc->key, &wc, \"eblob_check_disk_one: checksum verification failed\", err);\n+\t\t\teblob_mark_entry_removed_purge(bc->back, &dc->key, &rc);","path":"library/blob.c","position":226,"original_position":226,"commit_id":"86e2f18182565fed5ced9dce0cbfe4d557d79b2b","original_commit_id":"86e2f18182565fed5ced9dce0cbfe4d557d79b2b","user":{"login":"shaitan","id":446423,"avatar_url":"https://avatars.githubusercontent.com/u/446423?v=3","gravatar_id":"","url":"https://api.github.com/users/shaitan","html_url":"https://github.com/shaitan","followers_url":"https://api.github.com/users/shaitan/followers","following_url":"https://api.github.com/users/shaitan/following{/other_user}","gists_url":"https://api.github.com/users/shaitan/gists{/gist_id}","starred_url":"https://api.github.com/users/shaitan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shaitan/subscriptions","organizations_url":"https://api.github.com/users/shaitan/orgs","repos_url":"https://api.github.com/users/shaitan/repos","events_url":"https://api.github.com/users/shaitan/events{/privacy}","received_events_url":"https://api.github.com/users/shaitan/received_events","type":"User","site_admin":false},"body":"How do you work with these keys? Why don't you convert these blobs to fix keys' headers?","created_at":"2015-11-27T14:17:21Z","updated_at":"2015-11-27T14:17:21Z","html_url":"https://github.com/reverbrain/eblob/pull/166#discussion_r46050107","pull_request_url":"https://api.github.com/repos/reverbrain/eblob/pulls/166","_links":{"self":{"href":"https://api.github.com/repos/reverbrain/eblob/pulls/comments/46050107"},"html":{"href":"https://github.com/reverbrain/eblob/pull/166#discussion_r46050107"},"pull_request":{"href":"https://api.github.com/repos/reverbrain/eblob/pulls/166"}}},"pull_request":{"url":"https://api.github.com/repos/reverbrain/eblob/pulls/166","id":51924131,"html_url":"https://github.com/reverbrain/eblob/pull/166","diff_url":"https://github.com/reverbrain/eblob/pull/166.diff","patch_url":"https://github.com/reverbrain/eblob/pull/166.patch","issue_url":"https://api.github.com/repos/reverbrain/eblob/issues/166","number":166,"state":"open","locked":false,"title":"iterate: verify checksum for entries while iterating a blob","user":{"login":"abudnik","id":1283969,"avatar_url":"https://avatars.githubusercontent.com/u/1283969?v=3","gravatar_id":"","url":"https://api.github.com/users/abudnik","html_url":"https://github.com/abudnik","followers_url":"https://api.github.com/users/abudnik/followers","following_url":"https://api.github.com/users/abudnik/following{/other_user}","gists_url":"https://api.github.com/users/abudnik/gists{/gist_id}","starred_url":"https://api.github.com/users/abudnik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/abudnik/subscriptions","organizations_url":"https://api.github.com/users/abudnik/orgs","repos_url":"https://api.github.com/users/abudnik/repos","events_url":"https://api.github.com/users/abudnik/events{/privacy}","received_events_url":"https://api.github.com/users/abudnik/received_events","type":"User","site_admin":false},"body":"PR contains many additions/deletions - because code of static functions moved.","created_at":"2015-11-26T15:23:49Z","updated_at":"2015-11-27T14:17:21Z","closed_at":null,"merged_at":null,"merge_commit_sha":"1d9e9d366cc21dd087e6bb5fd82589d2d8c64149","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/reverbrain/eblob/pulls/166/commits","review_comments_url":"https://api.github.com/repos/reverbrain/eblob/pulls/166/comments","review_comment_url":"https://api.github.com/repos/reverbrain/eblob/pulls/comments{/number}","comments_url":"https://api.github.com/repos/reverbrain/eblob/issues/166/comments","statuses_url":"https://api.github.com/repos/reverbrain/eblob/statuses/86e2f18182565fed5ced9dce0cbfe4d557d79b2b","head":{"label":"abudnik:checksum","ref":"checksum","sha":"86e2f18182565fed5ced9dce0cbfe4d557d79b2b","user":{"login":"abudnik","id":1283969,"avatar_url":"https://avatars.githubusercontent.com/u/1283969?v=3","gravatar_id":"","url":"https://api.github.com/users/abudnik","html_url":"https://github.com/abudnik","followers_url":"https://api.github.com/users/abudnik/followers","following_url":"https://api.github.com/users/abudnik/following{/other_user}","gists_url":"https://api.github.com/users/abudnik/gists{/gist_id}","starred_url":"https://api.github.com/users/abudnik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/abudnik/subscriptions","organizations_url":"https://api.github.com/users/abudnik/orgs","repos_url":"https://api.github.com/users/abudnik/repos","events_url":"https://api.github.com/users/abudnik/events{/privacy}","received_events_url":"https://api.github.com/users/abudnik/received_events","type":"User","site_admin":false},"repo":{"id":27128618,"name":"eblob","full_name":"abudnik/eblob","owner":{"login":"abudnik","id":1283969,"avatar_url":"https://avatars.githubusercontent.com/u/1283969?v=3","gravatar_id":"","url":"https://api.github.com/users/abudnik","html_url":"https://github.com/abudnik","followers_url":"https://api.github.com/users/abudnik/followers","following_url":"https://api.github.com/users/abudnik/following{/other_user}","gists_url":"https://api.github.com/users/abudnik/gists{/gist_id}","starred_url":"https://api.github.com/users/abudnik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/abudnik/subscriptions","organizations_url":"https://api.github.com/users/abudnik/orgs","repos_url":"https://api.github.com/users/abudnik/repos","events_url":"https://api.github.com/users/abudnik/events{/privacy}","received_events_url":"https://api.github.com/users/abudnik/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/abudnik/eblob","description":"Eblob is an append-only low-level IO library, which saves data in blob files. Created as low-level backend for elliptics","fork":true,"url":"https://api.github.com/repos/abudnik/eblob","forks_url":"https://api.github.com/repos/abudnik/eblob/forks","keys_url":"https://api.github.com/repos/abudnik/eblob/keys{/key_id}","collaborators_url":"https://api.github.com/repos/abudnik/eblob/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/abudnik/eblob/teams","hooks_url":"https://api.github.com/repos/abudnik/eblob/hooks","issue_events_url":"https://api.github.com/repos/abudnik/eblob/issues/events{/number}","events_url":"https://api.github.com/repos/abudnik/eblob/events","assignees_url":"https://api.github.com/repos/abudnik/eblob/assignees{/user}","branches_url":"https://api.github.com/repos/abudnik/eblob/branches{/branch}","tags_url":"https://api.github.com/repos/abudnik/eblob/tags","blobs_url":"https://api.github.com/repos/abudnik/eblob/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/abudnik/eblob/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/abudnik/eblob/git/refs{/sha}","trees_url":"https://api.github.com/repos/abudnik/eblob/git/trees{/sha}","statuses_url":"https://api.github.com/repos/abudnik/eblob/statuses/{sha}","languages_url":"https://api.github.com/repos/abudnik/eblob/languages","stargazers_url":"https://api.github.com/repos/abudnik/eblob/stargazers","contributors_url":"https://api.github.com/repos/abudnik/eblob/contributors","subscribers_url":"https://api.github.com/repos/abudnik/eblob/subscribers","subscription_url":"https://api.github.com/repos/abudnik/eblob/subscription","commits_url":"https://api.github.com/repos/abudnik/eblob/commits{/sha}","git_commits_url":"https://api.github.com/repos/abudnik/eblob/git/commits{/sha}","comments_url":"https://api.github.com/repos/abudnik/eblob/comments{/number}","issue_comment_url":"https://api.github.com/repos/abudnik/eblob/issues/comments{/number}","contents_url":"https://api.github.com/repos/abudnik/eblob/contents/{+path}","compare_url":"https://api.github.com/repos/abudnik/eblob/compare/{base}...{head}","merges_url":"https://api.github.com/repos/abudnik/eblob/merges","archive_url":"https://api.github.com/repos/abudnik/eblob/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/abudnik/eblob/downloads","issues_url":"https://api.github.com/repos/abudnik/eblob/issues{/number}","pulls_url":"https://api.github.com/repos/abudnik/eblob/pulls{/number}","milestones_url":"https://api.github.com/repos/abudnik/eblob/milestones{/number}","notifications_url":"https://api.github.com/repos/abudnik/eblob/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/abudnik/eblob/labels{/name}","releases_url":"https://api.github.com/repos/abudnik/eblob/releases{/id}","created_at":"2014-11-25T14:08:38Z","updated_at":"2015-05-06T13:08:23Z","pushed_at":"2015-11-26T15:52:05Z","git_url":"git://github.com/abudnik/eblob.git","ssh_url":"git@github.com:abudnik/eblob.git","clone_url":"https://github.com/abudnik/eblob.git","svn_url":"https://github.com/abudnik/eblob","homepage":null,"size":5104,"stargazers_count":0,"watchers_count":0,"language":"C","has_issues":false,"has_downloads":true,"has_wiki":true,"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":"reverbrain:master","ref":"master","sha":"63124a0ec0243cfd08e010df3f68bd665ae71e0b","user":{"login":"reverbrain","id":1616511,"avatar_url":"https://avatars.githubusercontent.com/u/1616511?v=3","gravatar_id":"","url":"https://api.github.com/users/reverbrain","html_url":"https://github.com/reverbrain","followers_url":"https://api.github.com/users/reverbrain/followers","following_url":"https://api.github.com/users/reverbrain/following{/other_user}","gists_url":"https://api.github.com/users/reverbrain/gists{/gist_id}","starred_url":"https://api.github.com/users/reverbrain/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/reverbrain/subscriptions","organizations_url":"https://api.github.com/users/reverbrain/orgs","repos_url":"https://api.github.com/users/reverbrain/repos","events_url":"https://api.github.com/users/reverbrain/events{/privacy}","received_events_url":"https://api.github.com/users/reverbrain/received_events","type":"Organization","site_admin":false},"repo":{"id":4712280,"name":"eblob","full_name":"reverbrain/eblob","owner":{"login":"reverbrain","id":1616511,"avatar_url":"https://avatars.githubusercontent.com/u/1616511?v=3","gravatar_id":"","url":"https://api.github.com/users/reverbrain","html_url":"https://github.com/reverbrain","followers_url":"https://api.github.com/users/reverbrain/followers","following_url":"https://api.github.com/users/reverbrain/following{/other_user}","gists_url":"https://api.github.com/users/reverbrain/gists{/gist_id}","starred_url":"https://api.github.com/users/reverbrain/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/reverbrain/subscriptions","organizations_url":"https://api.github.com/users/reverbrain/orgs","repos_url":"https://api.github.com/users/reverbrain/repos","events_url":"https://api.github.com/users/reverbrain/events{/privacy}","received_events_url":"https://api.github.com/users/reverbrain/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/reverbrain/eblob","description":"Eblob is an append-only low-level IO library, which saves data in blob files. Created as low-level backend for elliptics","fork":false,"url":"https://api.github.com/repos/reverbrain/eblob","forks_url":"https://api.github.com/repos/reverbrain/eblob/forks","keys_url":"https://api.github.com/repos/reverbrain/eblob/keys{/key_id}","collaborators_url":"https://api.github.com/repos/reverbrain/eblob/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/reverbrain/eblob/teams","hooks_url":"https://api.github.com/repos/reverbrain/eblob/hooks","issue_events_url":"https://api.github.com/repos/reverbrain/eblob/issues/events{/number}","events_url":"https://api.github.com/repos/reverbrain/eblob/events","assignees_url":"https://api.github.com/repos/reverbrain/eblob/assignees{/user}","branches_url":"https://api.github.com/repos/reverbrain/eblob/branches{/branch}","tags_url":"https://api.github.com/repos/reverbrain/eblob/tags","blobs_url":"https://api.github.com/repos/reverbrain/eblob/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/reverbrain/eblob/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/reverbrain/eblob/git/refs{/sha}","trees_url":"https://api.github.com/repos/reverbrain/eblob/git/trees{/sha}","statuses_url":"https://api.github.com/repos/reverbrain/eblob/statuses/{sha}","languages_url":"https://api.github.com/repos/reverbrain/eblob/languages","stargazers_url":"https://api.github.com/repos/reverbrain/eblob/stargazers","contributors_url":"https://api.github.com/repos/reverbrain/eblob/contributors","subscribers_url":"https://api.github.com/repos/reverbrain/eblob/subscribers","subscription_url":"https://api.github.com/repos/reverbrain/eblob/subscription","commits_url":"https://api.github.com/repos/reverbrain/eblob/commits{/sha}","git_commits_url":"https://api.github.com/repos/reverbrain/eblob/git/commits{/sha}","comments_url":"https://api.github.com/repos/reverbrain/eblob/comments{/number}","issue_comment_url":"https://api.github.com/repos/reverbrain/eblob/issues/comments{/number}","contents_url":"https://api.github.com/repos/reverbrain/eblob/contents/{+path}","compare_url":"https://api.github.com/repos/reverbrain/eblob/compare/{base}...{head}","merges_url":"https://api.github.com/repos/reverbrain/eblob/merges","archive_url":"https://api.github.com/repos/reverbrain/eblob/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/reverbrain/eblob/downloads","issues_url":"https://api.github.com/repos/reverbrain/eblob/issues{/number}","pulls_url":"https://api.github.com/repos/reverbrain/eblob/pulls{/number}","milestones_url":"https://api.github.com/repos/reverbrain/eblob/milestones{/number}","notifications_url":"https://api.github.com/repos/reverbrain/eblob/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/reverbrain/eblob/labels{/name}","releases_url":"https://api.github.com/repos/reverbrain/eblob/releases{/id}","created_at":"2012-06-19T10:29:26Z","updated_at":"2015-10-17T08:20:56Z","pushed_at":"2015-11-26T15:52:05Z","git_url":"git://github.com/reverbrain/eblob.git","ssh_url":"git@github.com:reverbrain/eblob.git","clone_url":"https://github.com/reverbrain/eblob.git","svn_url":"https://github.com/reverbrain/eblob","homepage":null,"size":7092,"stargazers_count":77,"watchers_count":77,"language":"C","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":22,"mirror_url":null,"open_issues_count":6,"forks":22,"open_issues":6,"watchers":77,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/reverbrain/eblob/pulls/166"},"html":{"href":"https://github.com/reverbrain/eblob/pull/166"},"issue":{"href":"https://api.github.com/repos/reverbrain/eblob/issues/166"},"comments":{"href":"https://api.github.com/repos/reverbrain/eblob/issues/166/comments"},"review_comments":{"href":"https://api.github.com/repos/reverbrain/eblob/pulls/166/comments"},"review_comment":{"href":"https://api.github.com/repos/reverbrain/eblob/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/reverbrain/eblob/pulls/166/commits"},"statuses":{"href":"https://api.github.com/repos/reverbrain/eblob/statuses/86e2f18182565fed5ced9dce0cbfe4d557d79b2b"}}}}