{"action":"created","comment":{"url":"https://api.github.com/repos/rust-lang/rust/pulls/comments/90070263","pull_request_review_id":10593746,"id":90070263,"diff_hunk":"@@ -1741,13 +1741,29 @@ fn truncate_to_char_boundary(s: &str, mut max: usize) -> (bool, &str) {\n #[cold]\n fn slice_error_fail(s: &str, begin: usize, end: usize) -> ! {\n     const MAX_DISPLAY_LENGTH: usize = 256;\n-    let (truncated, s) = truncate_to_char_boundary(s, MAX_DISPLAY_LENGTH);\n+    let (truncated, s_trunc) = truncate_to_char_boundary(s, MAX_DISPLAY_LENGTH);\n     let ellipsis = if truncated { \"[...]\" } else { \"\" };\n \n+    // 1. out of bounds\n+    let index = if !s.is_char_boundary(begin) { begin } else { end };\n+    if begin > s.len() || end > s.len() {\n+        panic!(\"index {} is out of bounds of `{}`{}\", index, s_trunc, ellipsis);\n+    }\n+\n+    // 2. begin <= end\n     assert!(begin <= end, \"begin <= end ({} <= {}) when slicing `{}`{}\",\n-            begin, end, s, ellipsis);\n-    panic!(\"index {} and/or {} in `{}`{} do not lie on character boundary\",\n-          begin, end, s, ellipsis);\n+            begin, end, s_trunc, ellipsis);\n+\n+    // 3. character boundary\n+    // find the character\n+    let mut char_start = index;\n+    while !s.is_char_boundary(char_start) {\n+        char_start -= 1;\n+    }\n+    let ch = s[char_start..].chars().next().unwrap();","path":"src/libcore/str/mod.rs","position":27,"original_position":27,"commit_id":"46a26f223a30e058ec31cdc439939b194b169c0e","original_commit_id":"46a26f223a30e058ec31cdc439939b194b169c0e","user":{"login":"durka","id":47007,"avatar_url":"https://avatars.githubusercontent.com/u/47007?v=3","gravatar_id":"","url":"https://api.github.com/users/durka","html_url":"https://github.com/durka","followers_url":"https://api.github.com/users/durka/followers","following_url":"https://api.github.com/users/durka/following{/other_user}","gists_url":"https://api.github.com/users/durka/gists{/gist_id}","starred_url":"https://api.github.com/users/durka/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/durka/subscriptions","organizations_url":"https://api.github.com/users/durka/orgs","repos_url":"https://api.github.com/users/durka/repos","events_url":"https://api.github.com/users/durka/events{/privacy}","received_events_url":"https://api.github.com/users/durka/received_events","type":"User","site_admin":false},"body":"Also, if the problematic index is beyond `MAX_DISPLAY_LENGTH`, the preview isn't going to be very useful. It could instead show the region of the string from `max(0, index - MAX_DISPLAY_LENGTH/2) .. min(s.len(), index + MAX_DISPLAY_LENGTH/2)` with ellipses.","created_at":"2016-11-29T18:15:42Z","updated_at":"2016-11-29T18:20:15Z","html_url":"https://github.com/rust-lang/rust/pull/38066#discussion_r90070263","pull_request_url":"https://api.github.com/repos/rust-lang/rust/pulls/38066","_links":{"self":{"href":"https://api.github.com/repos/rust-lang/rust/pulls/comments/90070263"},"html":{"href":"https://github.com/rust-lang/rust/pull/38066#discussion_r90070263"},"pull_request":{"href":"https://api.github.com/repos/rust-lang/rust/pulls/38066"}}},"pull_request":{"url":"https://api.github.com/repos/rust-lang/rust/pulls/38066","id":95619297,"html_url":"https://github.com/rust-lang/rust/pull/38066","diff_url":"https://github.com/rust-lang/rust/pull/38066.diff","patch_url":"https://github.com/rust-lang/rust/pull/38066.patch","issue_url":"https://api.github.com/repos/rust-lang/rust/issues/38066","number":38066,"state":"open","locked":false,"title":"Use more specific panic message for &str slicing errors","user":{"login":"bluss","id":3209739,"avatar_url":"https://avatars.githubusercontent.com/u/3209739?v=3","gravatar_id":"","url":"https://api.github.com/users/bluss","html_url":"https://github.com/bluss","followers_url":"https://api.github.com/users/bluss/followers","following_url":"https://api.github.com/users/bluss/following{/other_user}","gists_url":"https://api.github.com/users/bluss/gists{/gist_id}","starred_url":"https://api.github.com/users/bluss/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bluss/subscriptions","organizations_url":"https://api.github.com/users/bluss/orgs","repos_url":"https://api.github.com/users/bluss/repos","events_url":"https://api.github.com/users/bluss/events{/privacy}","received_events_url":"https://api.github.com/users/bluss/received_events","type":"User","site_admin":false},"body":"Separate out of bounds errors from character boundary errors, and print\r\nmore details for character boundary errors.\r\n\r\nIt reports the first error it finds in:\r\n\r\n1. begin out of bounds\r\n2. end out of bounds\r\n3. begin <= end violated\r\n3. begin not char boundary\r\n5. end not char boundary.\r\n\r\nExample:\r\n\r\n    &\"abcαβγ\"[..4]\r\n\r\n    thread 'str::test_slice_fail_boundary_1' panicked at 'index 4 is not\r\n    a char boundary; it is inside 'α' (bytes 3..5) of `abcαβγ`'\r\n\r\nFixes #38052","created_at":"2016-11-29T03:14:58Z","updated_at":"2016-11-29T18:20:15Z","closed_at":null,"merged_at":null,"merge_commit_sha":"9723c56f14af1fee006a894593d850f0d0df4b72","assignee":{"login":"sfackler","id":1455697,"avatar_url":"https://avatars.githubusercontent.com/u/1455697?v=3","gravatar_id":"","url":"https://api.github.com/users/sfackler","html_url":"https://github.com/sfackler","followers_url":"https://api.github.com/users/sfackler/followers","following_url":"https://api.github.com/users/sfackler/following{/other_user}","gists_url":"https://api.github.com/users/sfackler/gists{/gist_id}","starred_url":"https://api.github.com/users/sfackler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfackler/subscriptions","organizations_url":"https://api.github.com/users/sfackler/orgs","repos_url":"https://api.github.com/users/sfackler/repos","events_url":"https://api.github.com/users/sfackler/events{/privacy}","received_events_url":"https://api.github.com/users/sfackler/received_events","type":"User","site_admin":false},"assignees":[{"login":"sfackler","id":1455697,"avatar_url":"https://avatars.githubusercontent.com/u/1455697?v=3","gravatar_id":"","url":"https://api.github.com/users/sfackler","html_url":"https://github.com/sfackler","followers_url":"https://api.github.com/users/sfackler/followers","following_url":"https://api.github.com/users/sfackler/following{/other_user}","gists_url":"https://api.github.com/users/sfackler/gists{/gist_id}","starred_url":"https://api.github.com/users/sfackler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfackler/subscriptions","organizations_url":"https://api.github.com/users/sfackler/orgs","repos_url":"https://api.github.com/users/sfackler/repos","events_url":"https://api.github.com/users/sfackler/events{/privacy}","received_events_url":"https://api.github.com/users/sfackler/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/rust-lang/rust/pulls/38066/commits","review_comments_url":"https://api.github.com/repos/rust-lang/rust/pulls/38066/comments","review_comment_url":"https://api.github.com/repos/rust-lang/rust/pulls/comments{/number}","comments_url":"https://api.github.com/repos/rust-lang/rust/issues/38066/comments","statuses_url":"https://api.github.com/repos/rust-lang/rust/statuses/46a26f223a30e058ec31cdc439939b194b169c0e","head":{"label":"bluss:string-slice-error","ref":"string-slice-error","sha":"46a26f223a30e058ec31cdc439939b194b169c0e","user":{"login":"bluss","id":3209739,"avatar_url":"https://avatars.githubusercontent.com/u/3209739?v=3","gravatar_id":"","url":"https://api.github.com/users/bluss","html_url":"https://github.com/bluss","followers_url":"https://api.github.com/users/bluss/followers","following_url":"https://api.github.com/users/bluss/following{/other_user}","gists_url":"https://api.github.com/users/bluss/gists{/gist_id}","starred_url":"https://api.github.com/users/bluss/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bluss/subscriptions","organizations_url":"https://api.github.com/users/bluss/orgs","repos_url":"https://api.github.com/users/bluss/repos","events_url":"https://api.github.com/users/bluss/events{/privacy}","received_events_url":"https://api.github.com/users/bluss/received_events","type":"User","site_admin":false},"repo":{"id":27685739,"name":"rust","full_name":"bluss/rust","owner":{"login":"bluss","id":3209739,"avatar_url":"https://avatars.githubusercontent.com/u/3209739?v=3","gravatar_id":"","url":"https://api.github.com/users/bluss","html_url":"https://github.com/bluss","followers_url":"https://api.github.com/users/bluss/followers","following_url":"https://api.github.com/users/bluss/following{/other_user}","gists_url":"https://api.github.com/users/bluss/gists{/gist_id}","starred_url":"https://api.github.com/users/bluss/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bluss/subscriptions","organizations_url":"https://api.github.com/users/bluss/orgs","repos_url":"https://api.github.com/users/bluss/repos","events_url":"https://api.github.com/users/bluss/events{/privacy}","received_events_url":"https://api.github.com/users/bluss/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/bluss/rust","description":"a safe, concurrent, practical language","fork":true,"url":"https://api.github.com/repos/bluss/rust","forks_url":"https://api.github.com/repos/bluss/rust/forks","keys_url":"https://api.github.com/repos/bluss/rust/keys{/key_id}","collaborators_url":"https://api.github.com/repos/bluss/rust/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/bluss/rust/teams","hooks_url":"https://api.github.com/repos/bluss/rust/hooks","issue_events_url":"https://api.github.com/repos/bluss/rust/issues/events{/number}","events_url":"https://api.github.com/repos/bluss/rust/events","assignees_url":"https://api.github.com/repos/bluss/rust/assignees{/user}","branches_url":"https://api.github.com/repos/bluss/rust/branches{/branch}","tags_url":"https://api.github.com/repos/bluss/rust/tags","blobs_url":"https://api.github.com/repos/bluss/rust/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/bluss/rust/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/bluss/rust/git/refs{/sha}","trees_url":"https://api.github.com/repos/bluss/rust/git/trees{/sha}","statuses_url":"https://api.github.com/repos/bluss/rust/statuses/{sha}","languages_url":"https://api.github.com/repos/bluss/rust/languages","stargazers_url":"https://api.github.com/repos/bluss/rust/stargazers","contributors_url":"https://api.github.com/repos/bluss/rust/contributors","subscribers_url":"https://api.github.com/repos/bluss/rust/subscribers","subscription_url":"https://api.github.com/repos/bluss/rust/subscription","commits_url":"https://api.github.com/repos/bluss/rust/commits{/sha}","git_commits_url":"https://api.github.com/repos/bluss/rust/git/commits{/sha}","comments_url":"https://api.github.com/repos/bluss/rust/comments{/number}","issue_comment_url":"https://api.github.com/repos/bluss/rust/issues/comments{/number}","contents_url":"https://api.github.com/repos/bluss/rust/contents/{+path}","compare_url":"https://api.github.com/repos/bluss/rust/compare/{base}...{head}","merges_url":"https://api.github.com/repos/bluss/rust/merges","archive_url":"https://api.github.com/repos/bluss/rust/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/bluss/rust/downloads","issues_url":"https://api.github.com/repos/bluss/rust/issues{/number}","pulls_url":"https://api.github.com/repos/bluss/rust/pulls{/number}","milestones_url":"https://api.github.com/repos/bluss/rust/milestones{/number}","notifications_url":"https://api.github.com/repos/bluss/rust/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/bluss/rust/labels{/name}","releases_url":"https://api.github.com/repos/bluss/rust/releases{/id}","deployments_url":"https://api.github.com/repos/bluss/rust/deployments","created_at":"2014-12-07T21:37:14Z","updated_at":"2016-01-20T17:47:49Z","pushed_at":"2016-11-29T03:21:37Z","git_url":"git://github.com/bluss/rust.git","ssh_url":"git@github.com:bluss/rust.git","clone_url":"https://github.com/bluss/rust.git","svn_url":"https://github.com/bluss/rust","homepage":"http://www.rust-lang.org","size":308763,"stargazers_count":0,"watchers_count":0,"language":"Rust","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"rust-lang:master","ref":"master","sha":"1c448574bc668b0de70ed75223bf8798d17bf058","user":{"login":"rust-lang","id":5430905,"avatar_url":"https://avatars.githubusercontent.com/u/5430905?v=3","gravatar_id":"","url":"https://api.github.com/users/rust-lang","html_url":"https://github.com/rust-lang","followers_url":"https://api.github.com/users/rust-lang/followers","following_url":"https://api.github.com/users/rust-lang/following{/other_user}","gists_url":"https://api.github.com/users/rust-lang/gists{/gist_id}","starred_url":"https://api.github.com/users/rust-lang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rust-lang/subscriptions","organizations_url":"https://api.github.com/users/rust-lang/orgs","repos_url":"https://api.github.com/users/rust-lang/repos","events_url":"https://api.github.com/users/rust-lang/events{/privacy}","received_events_url":"https://api.github.com/users/rust-lang/received_events","type":"Organization","site_admin":false},"repo":{"id":724712,"name":"rust","full_name":"rust-lang/rust","owner":{"login":"rust-lang","id":5430905,"avatar_url":"https://avatars.githubusercontent.com/u/5430905?v=3","gravatar_id":"","url":"https://api.github.com/users/rust-lang","html_url":"https://github.com/rust-lang","followers_url":"https://api.github.com/users/rust-lang/followers","following_url":"https://api.github.com/users/rust-lang/following{/other_user}","gists_url":"https://api.github.com/users/rust-lang/gists{/gist_id}","starred_url":"https://api.github.com/users/rust-lang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rust-lang/subscriptions","organizations_url":"https://api.github.com/users/rust-lang/orgs","repos_url":"https://api.github.com/users/rust-lang/repos","events_url":"https://api.github.com/users/rust-lang/events{/privacy}","received_events_url":"https://api.github.com/users/rust-lang/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/rust-lang/rust","description":"A safe, concurrent, practical language.","fork":false,"url":"https://api.github.com/repos/rust-lang/rust","forks_url":"https://api.github.com/repos/rust-lang/rust/forks","keys_url":"https://api.github.com/repos/rust-lang/rust/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rust-lang/rust/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rust-lang/rust/teams","hooks_url":"https://api.github.com/repos/rust-lang/rust/hooks","issue_events_url":"https://api.github.com/repos/rust-lang/rust/issues/events{/number}","events_url":"https://api.github.com/repos/rust-lang/rust/events","assignees_url":"https://api.github.com/repos/rust-lang/rust/assignees{/user}","branches_url":"https://api.github.com/repos/rust-lang/rust/branches{/branch}","tags_url":"https://api.github.com/repos/rust-lang/rust/tags","blobs_url":"https://api.github.com/repos/rust-lang/rust/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rust-lang/rust/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rust-lang/rust/git/refs{/sha}","trees_url":"https://api.github.com/repos/rust-lang/rust/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rust-lang/rust/statuses/{sha}","languages_url":"https://api.github.com/repos/rust-lang/rust/languages","stargazers_url":"https://api.github.com/repos/rust-lang/rust/stargazers","contributors_url":"https://api.github.com/repos/rust-lang/rust/contributors","subscribers_url":"https://api.github.com/repos/rust-lang/rust/subscribers","subscription_url":"https://api.github.com/repos/rust-lang/rust/subscription","commits_url":"https://api.github.com/repos/rust-lang/rust/commits{/sha}","git_commits_url":"https://api.github.com/repos/rust-lang/rust/git/commits{/sha}","comments_url":"https://api.github.com/repos/rust-lang/rust/comments{/number}","issue_comment_url":"https://api.github.com/repos/rust-lang/rust/issues/comments{/number}","contents_url":"https://api.github.com/repos/rust-lang/rust/contents/{+path}","compare_url":"https://api.github.com/repos/rust-lang/rust/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rust-lang/rust/merges","archive_url":"https://api.github.com/repos/rust-lang/rust/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rust-lang/rust/downloads","issues_url":"https://api.github.com/repos/rust-lang/rust/issues{/number}","pulls_url":"https://api.github.com/repos/rust-lang/rust/pulls{/number}","milestones_url":"https://api.github.com/repos/rust-lang/rust/milestones{/number}","notifications_url":"https://api.github.com/repos/rust-lang/rust/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rust-lang/rust/labels{/name}","releases_url":"https://api.github.com/repos/rust-lang/rust/releases{/id}","deployments_url":"https://api.github.com/repos/rust-lang/rust/deployments","created_at":"2010-06-16T20:39:03Z","updated_at":"2016-11-29T18:08:57Z","pushed_at":"2016-11-29T16:52:36Z","git_url":"git://github.com/rust-lang/rust.git","ssh_url":"git@github.com:rust-lang/rust.git","clone_url":"https://github.com/rust-lang/rust.git","svn_url":"https://github.com/rust-lang/rust","homepage":"https://www.rust-lang.org","size":526647,"stargazers_count":19155,"watchers_count":19155,"language":"Rust","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":3681,"mirror_url":null,"open_issues_count":2935,"forks":3681,"open_issues":2935,"watchers":19155,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/rust-lang/rust/pulls/38066"},"html":{"href":"https://github.com/rust-lang/rust/pull/38066"},"issue":{"href":"https://api.github.com/repos/rust-lang/rust/issues/38066"},"comments":{"href":"https://api.github.com/repos/rust-lang/rust/issues/38066/comments"},"review_comments":{"href":"https://api.github.com/repos/rust-lang/rust/pulls/38066/comments"},"review_comment":{"href":"https://api.github.com/repos/rust-lang/rust/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/rust-lang/rust/pulls/38066/commits"},"statuses":{"href":"https://api.github.com/repos/rust-lang/rust/statuses/46a26f223a30e058ec31cdc439939b194b169c0e"}}}}
{"actor":{"display_login":"durka"}}