{"action":"created","comment":{"url":"https://api.github.com/repos/greenplum-db/gpdb/pulls/comments/241255954","pull_request_review_id":184482230,"id":241255954,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDI0MTI1NTk1NA==","diff_hunk":"@@ -742,11 +756,26 @@ ExecFetchSlotMemTuple(TupleTableSlot *slot, bool inline_toast)\n \t\tif(!inline_toast || !memtuple_get_hasext(slot->PRIVATE_tts_memtuple))\n \t\t\treturn slot->PRIVATE_tts_memtuple;\n \n+\t\t/*\n+\t\t * The memtuple must be de-toasted.  This is done in two steps.  (1)\n+\t\t * compute the de-toasted length by de-toasting the toasted\n+\t\t * attributes.  (2) allocate a new memtuple with required length and\n+\t\t * perform de-toasting again and copy the de-toasted values in the new\n+\t\t * memtuple.\n+\t\t *\n+\t\t * TODO: de-toasting twice should be avoided, without affecting\n+\t\t * existing usage of memtuple_form_to.\n+\t\t */\n \t\toldTuple = slot->PRIVATE_tts_mtup_buf;\n \t\tslot->PRIVATE_tts_mtup_buf = NULL;\n \t\tslot->PRIVATE_tts_mtup_buf_len = 0;\n \t}\n \n+\t/*\n+\t * A side effect of this is to mark the slot as virtual - the tts_values\n+\t * array in the slot contains pointers to corresponding locations of\n+\t * toasted attributes in the memtuple.\n+\t */","path":"src/backend/executor/execTuples.c","position":46,"original_position":46,"commit_id":"70b8fbb89373cfff76f5a76b85b248ae96e11598","original_commit_id":"70b8fbb89373cfff76f5a76b85b248ae96e11598","user":{"login":"melanieplageman","id":165995,"node_id":"MDQ6VXNlcjE2NTk5NQ==","avatar_url":"https://avatars0.githubusercontent.com/u/165995?v=4","gravatar_id":"","url":"https://api.github.com/users/melanieplageman","html_url":"https://github.com/melanieplageman","followers_url":"https://api.github.com/users/melanieplageman/followers","following_url":"https://api.github.com/users/melanieplageman/following{/other_user}","gists_url":"https://api.github.com/users/melanieplageman/gists{/gist_id}","starred_url":"https://api.github.com/users/melanieplageman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/melanieplageman/subscriptions","organizations_url":"https://api.github.com/users/melanieplageman/orgs","repos_url":"https://api.github.com/users/melanieplageman/repos","events_url":"https://api.github.com/users/melanieplageman/events{/privacy}","received_events_url":"https://api.github.com/users/melanieplageman/received_events","type":"User","site_admin":false},"body":"So, why do we need to free the old tuple? In upstream, for mintuple, in the analogous function, `ExecFetchSlotMinimalTuple`, they do this\r\n```\r\n\toldContext = MemoryContextSwitchTo(slot->tts_mcxt);\r\n\tslot->tts_mintuple = ExecCopySlotMinimalTuple(slot);\r\n\tslot->tts_shouldFreeMin = true;\r\n\tMemoryContextSwitchTo(oldContext);\r\n``` ","created_at":"2018-12-13T02:40:09Z","updated_at":"2018-12-13T02:40:09Z","html_url":"https://github.com/greenplum-db/gpdb/pull/6448#discussion_r241255954","pull_request_url":"https://api.github.com/repos/greenplum-db/gpdb/pulls/6448","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/greenplum-db/gpdb/pulls/comments/241255954"},"html":{"href":"https://github.com/greenplum-db/gpdb/pull/6448#discussion_r241255954"},"pull_request":{"href":"https://api.github.com/repos/greenplum-db/gpdb/pulls/6448"}}},"pull_request":{"url":"https://api.github.com/repos/greenplum-db/gpdb/pulls/6448","id":236933977,"node_id":"MDExOlB1bGxSZXF1ZXN0MjM2OTMzOTc3","html_url":"https://github.com/greenplum-db/gpdb/pull/6448","diff_url":"https://github.com/greenplum-db/gpdb/pull/6448.diff","patch_url":"https://github.com/greenplum-db/gpdb/pull/6448.patch","issue_url":"https://api.github.com/repos/greenplum-db/gpdb/issues/6448","number":6448,"state":"open","locked":false,"title":"Fix use-after-free bug in memtuple de-toasting","user":{"login":"asimrp","id":4307811,"node_id":"MDQ6VXNlcjQzMDc4MTE=","avatar_url":"https://avatars1.githubusercontent.com/u/4307811?v=4","gravatar_id":"","url":"https://api.github.com/users/asimrp","html_url":"https://github.com/asimrp","followers_url":"https://api.github.com/users/asimrp/followers","following_url":"https://api.github.com/users/asimrp/following{/other_user}","gists_url":"https://api.github.com/users/asimrp/gists{/gist_id}","starred_url":"https://api.github.com/users/asimrp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/asimrp/subscriptions","organizations_url":"https://api.github.com/users/asimrp/orgs","repos_url":"https://api.github.com/users/asimrp/repos","events_url":"https://api.github.com/users/asimrp/events{/privacy}","received_events_url":"https://api.github.com/users/asimrp/received_events","type":"User","site_admin":false},"body":"De-toasting of memtuples incorrectly marked the slot containing the de-toasted\r\nmemtuple as virtual.  When a TupleTableSlot is marked virtual, its values array\r\nshould point to addresses within the memtuple.  The bug was that the values\r\narray was populated *before* de-toasting and the memory used by the toasted\r\nmemtuple was freed.  Subsequent usages of this slot suffered from dereferencing\r\ninvalid memory through the pointers in values array.\r\n\r\nThis is fixed by clearing the virtual flag from the slot after de-toasting.\r\nSubsequent users of the slot would have to populate the values array with\r\nvalid addresses from the new de-toasted memtuple (see slot_getattr()).\r\n\r\nThe bug is hard to discover because motion node in executor is the only place\r\nwhere a memtuple is de-toasted, before sending it over interconnect.  Only a\r\nfew plan nodes make use of a tuple that's already returned to the parent nodes\r\ne.g. Unique (DISTINCT ON()) and SetOp (INTERSECT / EXCEPT).  Example plan that\r\nmanifests the bug:\r\n```\r\n Gather Motion 3:1\r\n   Merge Key: a, b\r\n   ->  Unique\r\n         Group By: a, b\r\n         ->  Sort\r\n               Sort Key (Distinct): a, b\r\n               ->  Seq Scan\r\n```\r\nThe Unique node uses the previous tuple de-toasted by the Gather Motion sender\r\nto compare with the new tuple obtained from the Sort node for eliminating\r\nduplicates.\r\n\r\n## Here are some reminders before you submit the pull request\r\n- [] Add tests for the change\r\nTest is not added in this PR because we couldn't find a query that results in a plan like above.  The above plan is generated only on 5X_STABLE.  A test for this patch needs a plan where Unique or SetOp node is a direct child of a Motion node.\r\n\r\n- [] Document changes\r\n- [] Communicate in the mailing list if needed\r\n- [] Pass `make installcheck`","created_at":"2018-12-07T17:04:31Z","updated_at":"2018-12-13T02:40:09Z","closed_at":null,"merged_at":null,"merge_commit_sha":"2ce8c8b300f74b269d15652e241e2dff710dc195","assignee":{"login":"melanieplageman","id":165995,"node_id":"MDQ6VXNlcjE2NTk5NQ==","avatar_url":"https://avatars0.githubusercontent.com/u/165995?v=4","gravatar_id":"","url":"https://api.github.com/users/melanieplageman","html_url":"https://github.com/melanieplageman","followers_url":"https://api.github.com/users/melanieplageman/followers","following_url":"https://api.github.com/users/melanieplageman/following{/other_user}","gists_url":"https://api.github.com/users/melanieplageman/gists{/gist_id}","starred_url":"https://api.github.com/users/melanieplageman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/melanieplageman/subscriptions","organizations_url":"https://api.github.com/users/melanieplageman/orgs","repos_url":"https://api.github.com/users/melanieplageman/repos","events_url":"https://api.github.com/users/melanieplageman/events{/privacy}","received_events_url":"https://api.github.com/users/melanieplageman/received_events","type":"User","site_admin":false},"assignees":[{"login":"melanieplageman","id":165995,"node_id":"MDQ6VXNlcjE2NTk5NQ==","avatar_url":"https://avatars0.githubusercontent.com/u/165995?v=4","gravatar_id":"","url":"https://api.github.com/users/melanieplageman","html_url":"https://github.com/melanieplageman","followers_url":"https://api.github.com/users/melanieplageman/followers","following_url":"https://api.github.com/users/melanieplageman/following{/other_user}","gists_url":"https://api.github.com/users/melanieplageman/gists{/gist_id}","starred_url":"https://api.github.com/users/melanieplageman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/melanieplageman/subscriptions","organizations_url":"https://api.github.com/users/melanieplageman/orgs","repos_url":"https://api.github.com/users/melanieplageman/repos","events_url":"https://api.github.com/users/melanieplageman/events{/privacy}","received_events_url":"https://api.github.com/users/melanieplageman/received_events","type":"User","site_admin":false},{"login":"d","id":440892,"node_id":"MDQ6VXNlcjQ0MDg5Mg==","avatar_url":"https://avatars2.githubusercontent.com/u/440892?v=4","gravatar_id":"","url":"https://api.github.com/users/d","html_url":"https://github.com/d","followers_url":"https://api.github.com/users/d/followers","following_url":"https://api.github.com/users/d/following{/other_user}","gists_url":"https://api.github.com/users/d/gists{/gist_id}","starred_url":"https://api.github.com/users/d/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/d/subscriptions","organizations_url":"https://api.github.com/users/d/orgs","repos_url":"https://api.github.com/users/d/repos","events_url":"https://api.github.com/users/d/events{/privacy}","received_events_url":"https://api.github.com/users/d/received_events","type":"User","site_admin":false},{"login":"hardikar","id":2496677,"node_id":"MDQ6VXNlcjI0OTY2Nzc=","avatar_url":"https://avatars2.githubusercontent.com/u/2496677?v=4","gravatar_id":"","url":"https://api.github.com/users/hardikar","html_url":"https://github.com/hardikar","followers_url":"https://api.github.com/users/hardikar/followers","following_url":"https://api.github.com/users/hardikar/following{/other_user}","gists_url":"https://api.github.com/users/hardikar/gists{/gist_id}","starred_url":"https://api.github.com/users/hardikar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hardikar/subscriptions","organizations_url":"https://api.github.com/users/hardikar/orgs","repos_url":"https://api.github.com/users/hardikar/repos","events_url":"https://api.github.com/users/hardikar/events{/privacy}","received_events_url":"https://api.github.com/users/hardikar/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/greenplum-db/gpdb/pulls/6448/commits","review_comments_url":"https://api.github.com/repos/greenplum-db/gpdb/pulls/6448/comments","review_comment_url":"https://api.github.com/repos/greenplum-db/gpdb/pulls/comments{/number}","comments_url":"https://api.github.com/repos/greenplum-db/gpdb/issues/6448/comments","statuses_url":"https://api.github.com/repos/greenplum-db/gpdb/statuses/70b8fbb89373cfff76f5a76b85b248ae96e11598","head":{"label":"asimrp:memtuple-use-after-free6","ref":"memtuple-use-after-free6","sha":"70b8fbb89373cfff76f5a76b85b248ae96e11598","user":{"login":"asimrp","id":4307811,"node_id":"MDQ6VXNlcjQzMDc4MTE=","avatar_url":"https://avatars1.githubusercontent.com/u/4307811?v=4","gravatar_id":"","url":"https://api.github.com/users/asimrp","html_url":"https://github.com/asimrp","followers_url":"https://api.github.com/users/asimrp/followers","following_url":"https://api.github.com/users/asimrp/following{/other_user}","gists_url":"https://api.github.com/users/asimrp/gists{/gist_id}","starred_url":"https://api.github.com/users/asimrp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/asimrp/subscriptions","organizations_url":"https://api.github.com/users/asimrp/orgs","repos_url":"https://api.github.com/users/asimrp/repos","events_url":"https://api.github.com/users/asimrp/events{/privacy}","received_events_url":"https://api.github.com/users/asimrp/received_events","type":"User","site_admin":false},"repo":{"id":45747340,"node_id":"MDEwOlJlcG9zaXRvcnk0NTc0NzM0MA==","name":"gpdb","full_name":"asimrp/gpdb","private":false,"owner":{"login":"asimrp","id":4307811,"node_id":"MDQ6VXNlcjQzMDc4MTE=","avatar_url":"https://avatars1.githubusercontent.com/u/4307811?v=4","gravatar_id":"","url":"https://api.github.com/users/asimrp","html_url":"https://github.com/asimrp","followers_url":"https://api.github.com/users/asimrp/followers","following_url":"https://api.github.com/users/asimrp/following{/other_user}","gists_url":"https://api.github.com/users/asimrp/gists{/gist_id}","starred_url":"https://api.github.com/users/asimrp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/asimrp/subscriptions","organizations_url":"https://api.github.com/users/asimrp/orgs","repos_url":"https://api.github.com/users/asimrp/repos","events_url":"https://api.github.com/users/asimrp/events{/privacy}","received_events_url":"https://api.github.com/users/asimrp/received_events","type":"User","site_admin":false},"html_url":"https://github.com/asimrp/gpdb","description":"Pivotal Greenplum Database","fork":true,"url":"https://api.github.com/repos/asimrp/gpdb","forks_url":"https://api.github.com/repos/asimrp/gpdb/forks","keys_url":"https://api.github.com/repos/asimrp/gpdb/keys{/key_id}","collaborators_url":"https://api.github.com/repos/asimrp/gpdb/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/asimrp/gpdb/teams","hooks_url":"https://api.github.com/repos/asimrp/gpdb/hooks","issue_events_url":"https://api.github.com/repos/asimrp/gpdb/issues/events{/number}","events_url":"https://api.github.com/repos/asimrp/gpdb/events","assignees_url":"https://api.github.com/repos/asimrp/gpdb/assignees{/user}","branches_url":"https://api.github.com/repos/asimrp/gpdb/branches{/branch}","tags_url":"https://api.github.com/repos/asimrp/gpdb/tags","blobs_url":"https://api.github.com/repos/asimrp/gpdb/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/asimrp/gpdb/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/asimrp/gpdb/git/refs{/sha}","trees_url":"https://api.github.com/repos/asimrp/gpdb/git/trees{/sha}","statuses_url":"https://api.github.com/repos/asimrp/gpdb/statuses/{sha}","languages_url":"https://api.github.com/repos/asimrp/gpdb/languages","stargazers_url":"https://api.github.com/repos/asimrp/gpdb/stargazers","contributors_url":"https://api.github.com/repos/asimrp/gpdb/contributors","subscribers_url":"https://api.github.com/repos/asimrp/gpdb/subscribers","subscription_url":"https://api.github.com/repos/asimrp/gpdb/subscription","commits_url":"https://api.github.com/repos/asimrp/gpdb/commits{/sha}","git_commits_url":"https://api.github.com/repos/asimrp/gpdb/git/commits{/sha}","comments_url":"https://api.github.com/repos/asimrp/gpdb/comments{/number}","issue_comment_url":"https://api.github.com/repos/asimrp/gpdb/issues/comments{/number}","contents_url":"https://api.github.com/repos/asimrp/gpdb/contents/{+path}","compare_url":"https://api.github.com/repos/asimrp/gpdb/compare/{base}...{head}","merges_url":"https://api.github.com/repos/asimrp/gpdb/merges","archive_url":"https://api.github.com/repos/asimrp/gpdb/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/asimrp/gpdb/downloads","issues_url":"https://api.github.com/repos/asimrp/gpdb/issues{/number}","pulls_url":"https://api.github.com/repos/asimrp/gpdb/pulls{/number}","milestones_url":"https://api.github.com/repos/asimrp/gpdb/milestones{/number}","notifications_url":"https://api.github.com/repos/asimrp/gpdb/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/asimrp/gpdb/labels{/name}","releases_url":"https://api.github.com/repos/asimrp/gpdb/releases{/id}","deployments_url":"https://api.github.com/repos/asimrp/gpdb/deployments","created_at":"2015-11-07T17:48:37Z","updated_at":"2016-02-10T23:13:44Z","pushed_at":"2018-12-07T19:17:00Z","git_url":"git://github.com/asimrp/gpdb.git","ssh_url":"git@github.com:asimrp/gpdb.git","clone_url":"https://github.com/asimrp/gpdb.git","svn_url":"https://github.com/asimrp/gpdb","homepage":"http://greenplum.org","size":331393,"stargazers_count":0,"watchers_count":0,"language":"PLpgSQL","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"greenplum-db:master","ref":"master","sha":"31364c3de8a0982183f467b5945513ffa4bd930b","user":{"login":"greenplum-db","id":14097842,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0MDk3ODQy","avatar_url":"https://avatars2.githubusercontent.com/u/14097842?v=4","gravatar_id":"","url":"https://api.github.com/users/greenplum-db","html_url":"https://github.com/greenplum-db","followers_url":"https://api.github.com/users/greenplum-db/followers","following_url":"https://api.github.com/users/greenplum-db/following{/other_user}","gists_url":"https://api.github.com/users/greenplum-db/gists{/gist_id}","starred_url":"https://api.github.com/users/greenplum-db/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/greenplum-db/subscriptions","organizations_url":"https://api.github.com/users/greenplum-db/orgs","repos_url":"https://api.github.com/users/greenplum-db/repos","events_url":"https://api.github.com/users/greenplum-db/events{/privacy}","received_events_url":"https://api.github.com/users/greenplum-db/received_events","type":"Organization","site_admin":false},"repo":{"id":44781140,"node_id":"MDEwOlJlcG9zaXRvcnk0NDc4MTE0MA==","name":"gpdb","full_name":"greenplum-db/gpdb","private":false,"owner":{"login":"greenplum-db","id":14097842,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0MDk3ODQy","avatar_url":"https://avatars2.githubusercontent.com/u/14097842?v=4","gravatar_id":"","url":"https://api.github.com/users/greenplum-db","html_url":"https://github.com/greenplum-db","followers_url":"https://api.github.com/users/greenplum-db/followers","following_url":"https://api.github.com/users/greenplum-db/following{/other_user}","gists_url":"https://api.github.com/users/greenplum-db/gists{/gist_id}","starred_url":"https://api.github.com/users/greenplum-db/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/greenplum-db/subscriptions","organizations_url":"https://api.github.com/users/greenplum-db/orgs","repos_url":"https://api.github.com/users/greenplum-db/repos","events_url":"https://api.github.com/users/greenplum-db/events{/privacy}","received_events_url":"https://api.github.com/users/greenplum-db/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/greenplum-db/gpdb","description":"Greenplum Database","fork":false,"url":"https://api.github.com/repos/greenplum-db/gpdb","forks_url":"https://api.github.com/repos/greenplum-db/gpdb/forks","keys_url":"https://api.github.com/repos/greenplum-db/gpdb/keys{/key_id}","collaborators_url":"https://api.github.com/repos/greenplum-db/gpdb/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/greenplum-db/gpdb/teams","hooks_url":"https://api.github.com/repos/greenplum-db/gpdb/hooks","issue_events_url":"https://api.github.com/repos/greenplum-db/gpdb/issues/events{/number}","events_url":"https://api.github.com/repos/greenplum-db/gpdb/events","assignees_url":"https://api.github.com/repos/greenplum-db/gpdb/assignees{/user}","branches_url":"https://api.github.com/repos/greenplum-db/gpdb/branches{/branch}","tags_url":"https://api.github.com/repos/greenplum-db/gpdb/tags","blobs_url":"https://api.github.com/repos/greenplum-db/gpdb/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/greenplum-db/gpdb/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/greenplum-db/gpdb/git/refs{/sha}","trees_url":"https://api.github.com/repos/greenplum-db/gpdb/git/trees{/sha}","statuses_url":"https://api.github.com/repos/greenplum-db/gpdb/statuses/{sha}","languages_url":"https://api.github.com/repos/greenplum-db/gpdb/languages","stargazers_url":"https://api.github.com/repos/greenplum-db/gpdb/stargazers","contributors_url":"https://api.github.com/repos/greenplum-db/gpdb/contributors","subscribers_url":"https://api.github.com/repos/greenplum-db/gpdb/subscribers","subscription_url":"https://api.github.com/repos/greenplum-db/gpdb/subscription","commits_url":"https://api.github.com/repos/greenplum-db/gpdb/commits{/sha}","git_commits_url":"https://api.github.com/repos/greenplum-db/gpdb/git/commits{/sha}","comments_url":"https://api.github.com/repos/greenplum-db/gpdb/comments{/number}","issue_comment_url":"https://api.github.com/repos/greenplum-db/gpdb/issues/comments{/number}","contents_url":"https://api.github.com/repos/greenplum-db/gpdb/contents/{+path}","compare_url":"https://api.github.com/repos/greenplum-db/gpdb/compare/{base}...{head}","merges_url":"https://api.github.com/repos/greenplum-db/gpdb/merges","archive_url":"https://api.github.com/repos/greenplum-db/gpdb/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/greenplum-db/gpdb/downloads","issues_url":"https://api.github.com/repos/greenplum-db/gpdb/issues{/number}","pulls_url":"https://api.github.com/repos/greenplum-db/gpdb/pulls{/number}","milestones_url":"https://api.github.com/repos/greenplum-db/gpdb/milestones{/number}","notifications_url":"https://api.github.com/repos/greenplum-db/gpdb/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/greenplum-db/gpdb/labels{/name}","releases_url":"https://api.github.com/repos/greenplum-db/gpdb/releases{/id}","deployments_url":"https://api.github.com/repos/greenplum-db/gpdb/deployments","created_at":"2015-10-23T00:25:17Z","updated_at":"2018-12-13T02:36:27Z","pushed_at":"2018-12-13T02:36:16Z","git_url":"git://github.com/greenplum-db/gpdb.git","ssh_url":"git@github.com:greenplum-db/gpdb.git","clone_url":"https://github.com/greenplum-db/gpdb.git","svn_url":"https://github.com/greenplum-db/gpdb","homepage":"http://greenplum.org","size":333590,"stargazers_count":2841,"watchers_count":2841,"language":"C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":865,"mirror_url":null,"archived":false,"open_issues_count":279,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":865,"open_issues":279,"watchers":2841,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/greenplum-db/gpdb/pulls/6448"},"html":{"href":"https://github.com/greenplum-db/gpdb/pull/6448"},"issue":{"href":"https://api.github.com/repos/greenplum-db/gpdb/issues/6448"},"comments":{"href":"https://api.github.com/repos/greenplum-db/gpdb/issues/6448/comments"},"review_comments":{"href":"https://api.github.com/repos/greenplum-db/gpdb/pulls/6448/comments"},"review_comment":{"href":"https://api.github.com/repos/greenplum-db/gpdb/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/greenplum-db/gpdb/pulls/6448/commits"},"statuses":{"href":"https://api.github.com/repos/greenplum-db/gpdb/statuses/70b8fbb89373cfff76f5a76b85b248ae96e11598"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"melanieplageman"}}