Uploaded image for project: 'Crucible'
  1. Crucible
  2. CRUC-7997

Malformed URL generated with "//" when adding content to a Review via "Edit Details"

    XMLWordPrintable

Details

    Description

      Summary

      Malformed URL generated with "//" when adding content to a Review via "Edit Details"

      Environment

      Crucible = Any Support Version (found in latest)
      OS = Any (Win, Linux, MAC)
      Browser =(Chrome, FireFox, IE)

      Steps to Reproduce

      1. Open or create a Review in Crucible
        • Start review if needed
        • To see the "//" we will need use the browsers devtools inspect the requests and responses
      2. Select Edit Details
      3. In your browsers devtools select "Network"
      4. Select "edit-details" name under network activity to view response (this is a POST but, if you get a 302 you may need to view the next GET )
        • At bottom of response you see "baseUrlSuffix": "/"}}if no default repo OR {{"baseUrlSuffix": "/<repos-name>"
      5. Select Add Content button
      6. Select Browse Changesets
      7. You will find a GET request for the repository or for "/" if no repo. View the Header information and you will see
        "//" in the URL

      Expected Results

      The URL should not contain "//"

      Actual Results

      1. edit-details response
        {"errorMsg":"",
        "worked": true,
        "payloadHtml": "\n    \n    \n\n    \n\n    \u003cdiv id=\"managefiles\" class=\"details\"\u003e\n\n        \n            \n\n\n\n\n            \u003cdiv id=\"selectChanges\" class=\"selectBucket\"\u003e\n                \u003cdiv id=\"detailsBucket\" class=\"details\"\u003e\n                    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\u003cdiv id=\"editDetailsContent\"\u003e\n    \u003cdiv id=\"addReview\"\u003e\n\n        \n\u003cform id=\"editDetailsForm\" class=\"aui\" action=\"/fisheye/cru/CR-9/postDetails\" method=\"post\" name=\"editDetailsForm\" accept-charset=\"UTF-8\"\u003e\n\n        \n        \n        \n\n        \n\u003cdiv class=\"field-group\"\u003e\n            \n\u003clabel for=\"project-input\"\u003eProject\u003c/label\u003e\n\n            \n\n            \u003cinput type=\"hidden\"\n       id=\"project-input\"\n       name=\"projectKey\"\n       class=\"select long-field\"\n       value=\"CR\"\ndata-select2-type=\"project\"data-multiple=\"false\"data-limit=\"\"data-maximum-selection-size=\"\"data-minimum-input-length=\"\"data-source=\"/fisheye/json/cru/projectFinder?actionName=action:createReview\"data-initial-data=\"[{&#034;id&#034;:&#034;CR&#034;,&#034;displayPrimary&#034;:&#034;CR&#034;,&#034;displaySecondary&#034;:&#034;Default Project&#034;}]\"/\u003e\n\n\n        \u003c/div\u003e\n\n\n\n        \n\u003cdiv class=\"field-group\"\u003e\n            \n\u003clabel for=\"reviewTitle\"\u003eTitle\u003c/label\u003e\n            \n\u003cinput class=\"text reviewTitle long-field\" type=\"text\" name=\"title\" id=\"reviewTitle\" value=\"more stuff\" maxlength=\"255\"/\u003e\n        \u003c/div\u003e\n\n\n\n        \n\u003cdiv class=\"field-group\"\u003e\n            \n\u003clabel for=\"author-selected\"\u003eAuthor\u003c/label\u003e\n\n            \n\n            \u003cinput type=\"hidden\"\n       id=\"author-selected\"\n       name=\"newAuthor\"\n       class=\"select long-field\"\n       value=\"1\"\ndata-select2-type=\"users\"data-multiple=\"false\"data-limit=\"\"data-maximum-selection-size=\"\"data-minimum-input-length=\"\"data-source=\"/fisheye/json/cru/CR-9/reviewerFinder\"data-initial-data=\"[{&#034;displayName&#034;:&#034;sauce1173&#034;,&#034;username&#034;:&#034;sauce1173&#034;,&#034;id&#034;:&#034;1&#034;,&#034;avatarImageUrl&#034;:&#034;http://dude.office.atlassian.com/fisheye/avatar/sauce1173?s=48&#034;,&#034;link&#034;:&#034;\\u003ca class=\\&#034;user avatar userorcommitter-parent\\&#034; style=&#039;background-image:url(http://dude.office.atlassian.com/fisheye/avatar/sauce1173?s=19);padding-left:23px;&#039; href=\\&#034;/fisheye/user/sauce1173\\&#034;  title=\\&#034;\\&#034;\\u003e\\u003cspan class=\\&#034;linkText\\&#034;\\u003esauce1173\\u003c/span\\u003e\\u003c/a\\u003e&#034;,&#034;participant&#034;:&#034;moderator&#034;}]\"/\u003e\n\n\n        \u003c/div\u003e\n\n\n\n        \n            \n\u003cdiv class=\"field-group\"\u003e\n                \n\u003clabel for=\"moderator-selected\"\u003eModerator\u003c/label\u003e\n\n                \n\n                \u003cinput type=\"hidden\"\n       id=\"moderator-selected\"\n       name=\"newModerator\"\n       class=\"select long-field\"\n       value=\"1\"\ndata-select2-type=\"users\"data-multiple=\"false\"data-limit=\"\"data-maximum-selection-size=\"\"data-minimum-input-length=\"\"data-source=\"/fisheye/json/cru/CR-9/reviewerFinder\"data-initial-data=\"[{&#034;displayName&#034;:&#034;sauce1173&#034;,&#034;username&#034;:&#034;sauce1173&#034;,&#034;id&#034;:&#034;1&#034;,&#034;avatarImageUrl&#034;:&#034;http://dude.office.atlassian.com/fisheye/avatar/sauce1173?s=48&#034;,&#034;link&#034;:&#034;\\u003ca class=\\&#034;user avatar userorcommitter-parent\\&#034; style=&#039;background-image:url(http://dude.office.atlassian.com/fisheye/avatar/sauce1173?s=19);padding-left:23px;&#039; href=\\&#034;/fisheye/user/sauce1173\\&#034;  title=\\&#034;\\&#034;\\u003e\\u003cspan class=\\&#034;linkText\\&#034;\\u003esauce1173\\u003c/span\\u003e\\u003c/a\\u003e&#034;,&#034;participant&#034;:&#034;moderator&#034;}]\"/\u003e\n\n\n            \u003c/div\u003e\n\n\n        \n\n        \n\u003cdiv class=\"field-group\"\u003e\n            \n\u003clabel for=\"add-reviewer-input\"\u003eReviewers\u003c/label\u003e\n\n            \n\n            \u003cinput type=\"hidden\"\n       id=\"add-reviewer-input\"\n       name=\"reviewer\"\n       class=\"select long-field\"\n       value=\"\"\ndata-group-membership-url=\"/fisheye/rest-service/reviewer-search/CR-9/group-members/{group}\"data-select2-type=\"users-and-groups\"data-multiple=\"true\"data-limit=\"\"data-maximum-selection-size=\"\"data-minimum-input-length=\"\"data-source=\"/fisheye/rest-service/reviewer-search/CR-9/search\"data-initial-data=\"[]\"/\u003e\n\n\n            \u003cdiv\u003e\n                \n                    \n                \n                \n\n                \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\u003ca\n    \n\n\n\n\n\ntabindex=\"0\"\n\naria-controls=\"suggest-reviewers-inline-dialog2\"\naria-haspopup=\"true\"\nrole=\"button\"\ndata-aui-trigger\u003e\n\nSuggest reviewers...\n\n\u003c/a\u003e\n\n                \n\n\n\n\n\n\n\n\n\n\n\u003caui-inline-dialog2 id=\"suggest-reviewers-inline-dialog2\"\n\nalignment=\"bottom left\"\nresponds-to=\"toggle\"\u003e\u003cdiv class=\"spinner-container\"\u003e\u003c/div\u003e\u003c/aui-inline-dialog2\u003e\n\n\n                \n                    \n                    \n                \n                \u003cfieldset class=\"group edit-details-anybody\"\u003e\u003clegend\u003e\u003cspan\u003e\u003c/span\u003e\u003c/legend\u003e\u003cdiv class=\"checkbox\"\u003e\u003cinput class=\"checkbox\" type=\"checkbox\" name=\"allowJoin\" id=\"anybody\" value=\"true\" checked=\"checked\"/\u003e\u003clabel for=\"anybody\"\u003eAllow anyone to join\u003c/label\u003e\u003c/div\u003e\u003c/fieldset\u003e\n            \u003c/div\u003e\n        \u003c/div\u003e\n\n\n\n        \n\u003cdiv id=\"review-objectives\" class=\"field-group wiki-preview-wrapper\"\u003e\n            \n\u003clabel for=\"description\"\u003eObjectives\u003c/label\u003e\n            \u003cdiv class=\"long-field\"\u003e\n                \n\u003ctextarea name=\"description\" class=\"textarea reviewDescription edit full-width-field \" id=\"description\" rows=\"4\" cols=\"32\"\u003e\u003c/textarea\u003e\n\n                \u003cdiv class=\"wiki-preview-pane markup view wiki__new\" style=\"display: none;\"\u003e\u003c/div\u003e\u003cdiv class=\"wiki-preview-button-holder wiki__new\"\u003e\n\u003ca class=\"aui-button aui-button-subtle wiki-help-button aui-button-compact\" tabindex=\"0\"\u003e\u003cspan class=\"aui-icon aui-icon-small aui-iconfont-help\"\u003eWiki syntax help \u003c/span\u003e\u003c/a\u003e\n\n\u003ca class=\"aui-button aui-button-subtle wiki-preview-button aui-button-compact\" tabindex=\"0\"\u003e\u003cspan class=\"aui-icon aui-icon-small aui-iconfont-view\"\u003ePreview \u003c/span\u003e\u003c/a\u003e\n\u003cspan class=\"wiki-preview-button-spinner\"\u003e\u003c/span\u003e\u003c/div\u003e\n\n            \u003c/div\u003e\n        \u003c/div\u003e\n\n\n\n        \n\u003cdiv class=\"field-group\"\u003e\n            \n\u003clabel for=\"due-date-input\"\u003eDue Date\u003c/label\u003e\n            \n\u003cspan class=\"pretty-date-time\" style=\"position: relative;\"\u003e\n    \u003cinput name=\"due-date-input\" id=\"due-date-input\" type=\"text\" class=\"text\" style=\"width:90px\"\n           value=\"03 Apr 2017\"\u003e\n    \u003cinput name=\"due-date-store\" id=\"due-date-store\" type=\"hidden\"\n           value=\"2017-04-03\"\u003e\n    \n    \u003cinput name=\"due-time-store\" id=\"due-time-store\" type=\"hidden\" value=\"T17:00:00\"\u003e\n    \u003cspan style=\"position: relative;\"\u003e\n        \u003cselect name=\"due-time-select\" id=\"due-time-select\" style=\"width:100px\"\u003e\n            \n            \n                \u003coption value=\"T00:00:00\" \u003e12:00 AM\u003c/option\u003e\n            \n                \u003coption value=\"T00:30:00\" \u003e12:30 AM\u003c/option\u003e\n            \n                \u003coption value=\"T01:00:00\" \u003e01:00 AM\u003c/option\u003e\n            \n                \u003coption value=\"T01:30:00\" \u003e01:30 AM\u003c/option\u003e\n            \n                \u003coption value=\"T02:00:00\" \u003e02:00 AM\u003c/option\u003e\n            \n                \u003coption value=\"T02:30:00\" \u003e02:30 AM\u003c/option\u003e\n            \n                \u003coption value=\"T03:00:00\" \u003e03:00 AM\u003c/option\u003e\n            \n                \u003coption value=\"T03:30:00\" \u003e03:30 AM\u003c/option\u003e\n            \n                \u003coption value=\"T04:00:00\" \u003e04:00 AM\u003c/option\u003e\n            \n                \u003coption value=\"T04:30:00\" \u003e04:30 AM\u003c/option\u003e\n            \n                \u003coption value=\"T05:00:00\" \u003e05:00 AM\u003c/option\u003e\n            \n                \u003coption value=\"T05:30:00\" \u003e05:30 AM\u003c/option\u003e\n            \n                \u003coption value=\"T06:00:00\" \u003e06:00 AM\u003c/option\u003e\n            \n                \u003coption value=\"T06:30:00\" \u003e06:30 AM\u003c/option\u003e\n            \n                \u003coption value=\"T07:00:00\" \u003e07:00 AM\u003c/option\u003e\n            \n                \u003coption value=\"T07:30:00\" \u003e07:30 AM\u003c/option\u003e\n            \n                \u003coption value=\"T08:00:00\" \u003e08:00 AM\u003c/option\u003e\n            \n                \u003coption value=\"T08:30:00\" \u003e08:30 AM\u003c/option\u003e\n            \n                \u003coption value=\"T09:00:00\" \u003e09:00 AM\u003c/option\u003e\n            \n                \u003coption value=\"T09:30:00\" \u003e09:30 AM\u003c/option\u003e\n            \n                \u003coption value=\"T10:00:00\" \u003e10:00 AM\u003c/option\u003e\n            \n                \u003coption value=\"T10:30:00\" \u003e10:30 AM\u003c/option\u003e\n            \n                \u003coption value=\"T11:00:00\" \u003e11:00 AM\u003c/option\u003e\n            \n                \u003coption value=\"T11:30:00\" \u003e11:30 AM\u003c/option\u003e\n            \n                \u003coption value=\"T12:00:00\" \u003e12:00 PM\u003c/option\u003e\n            \n                \u003coption value=\"T12:30:00\" \u003e12:30 PM\u003c/option\u003e\n            \n                \u003coption value=\"T13:00:00\" \u003e01:00 PM\u003c/option\u003e\n            \n                \u003coption value=\"T13:30:00\" \u003e01:30 PM\u003c/option\u003e\n            \n                \u003coption value=\"T14:00:00\" \u003e02:00 PM\u003c/option\u003e\n            \n                \u003coption value=\"T14:30:00\" \u003e02:30 PM\u003c/option\u003e\n            \n                \u003coption value=\"T15:00:00\" \u003e03:00 PM\u003c/option\u003e\n            \n                \u003coption value=\"T15:30:00\" \u003e03:30 PM\u003c/option\u003e\n            \n                \u003coption value=\"T16:00:00\" \u003e04:00 PM\u003c/option\u003e\n            \n                \u003coption value=\"T16:30:00\" \u003e04:30 PM\u003c/option\u003e\n            \n                \u003coption value=\"T17:00:00\" selected=\"selected\"\u003e05:00 PM\u003c/option\u003e\n            \n                \u003coption value=\"T17:30:00\" \u003e05:30 PM\u003c/option\u003e\n            \n                \u003coption value=\"T18:00:00\" \u003e06:00 PM\u003c/option\u003e\n            \n                \u003coption value=\"T18:30:00\" \u003e06:30 PM\u003c/option\u003e\n            \n                \u003coption value=\"T19:00:00\" \u003e07:00 PM\u003c/option\u003e\n            \n                \u003coption value=\"T19:30:00\" \u003e07:30 PM\u003c/option\u003e\n            \n                \u003coption value=\"T20:00:00\" \u003e08:00 PM\u003c/option\u003e\n            \n                \u003coption value=\"T20:30:00\" \u003e08:30 PM\u003c/option\u003e\n            \n                \u003coption value=\"T21:00:00\" \u003e09:00 PM\u003c/option\u003e\n            \n                \u003coption value=\"T21:30:00\" \u003e09:30 PM\u003c/option\u003e\n            \n                \u003coption value=\"T22:00:00\" \u003e10:00 PM\u003c/option\u003e\n            \n                \u003coption value=\"T22:30:00\" \u003e10:30 PM\u003c/option\u003e\n            \n                \u003coption value=\"T23:00:00\" \u003e11:00 PM\u003c/option\u003e\n            \n                \u003coption value=\"T23:30:00\" \u003e11:30 PM\u003c/option\u003e\n            \n        \u003c/select\u003e\n    \u003c/span\u003e\n    \u003cinput name=\"dueDateString\" id=\"dueDateString\" type=\"hidden\" size=\"20\"\n       value=\"2017-04-03T17:00:00\"\u003e\n\u003c/span\u003e\n        \u003c/div\u003e\n\n\n\n        \n\n        \n\u003cdiv class=\"field-group\"\u003e\n            \n\u003clabel for=\"parentReviewId\"\u003eLinked Review\u003c/label\u003e\n\n            \n\n            \u003cinput type=\"hidden\"\n       id=\"parentReviewId\"\n       name=\"parentReviewId\"\n       class=\"select long-field\"\n       value=\"\"\ndata-select2-type=\"review\"data-multiple=\"true\"data-limit=\"10\"data-maximum-selection-size=\"1\"data-minimum-input-length=\"2\"data-source=\"/fisheye/json/cru/reviewFinder\"data-initial-data=\"[{&#034;url&#034;:&#034;/fisheye/cru/&#034;,&#034;permaId&#034;:&#034;&#034;,&#034;name&#034;:&#034;&#034;}]\"/\u003e\n\n\n        \u003c/div\u003e\n\n\n\n        \n            \n\u003cdiv class=\"field-group\"\u003e\n                \n\u003clabel for=\"jiraIssueKey\"\u003eLinked Issue\u003c/label\u003e\n\n                \n\n                \u003cinput type=\"hidden\"\n       id=\"jiraIssueKey\"\n       name=\"jiraIssueKey\"\n       class=\"select long-field\"\n       value=\"\"\ndata-select2-type=\"jira\"data-multiple=\"true\"data-limit=\"\"data-maximum-selection-size=\"1\"data-minimum-input-length=\"2\"data-source=\"/fisheye/json/cru/CR-9/findJiraIssueAjax\"data-initial-data=\"[{&#034;url&#034;:&#034;/fisheye/action/jira-issue.do?key=&#034;,&#034;issueKey&#034;:&#034;&#034;}]\"/\u003e\n\n\n            \u003c/div\u003e\n\n\n        \n\n        \n\n        \n            \n\u003cdiv class=\"field-group\"\u003e\n                \n\u003clabel for=\"inviteeInput\"\u003eInvited Reviewers\u003c/label\u003e\n                \n\u003cinput class=\"text\" type=\"text\" name=\"inviteeInput\" id=\"inviteeInput\"/\u003e\n                \n\u003cinput class=\"button\" type=\"button\" name=\"addInviteeButton\" id=\"addInviteeButton\" value=\"Invite\"/\u003e\n\n                \u003cdiv style=\"margin-top: 10px\"\u003e\n                    \u003cspan id=\"inviteeSpan\"\u003e\n                        \n                    \u003c/span\u003e\n                \u003c/div\u003e\n            \u003c/div\u003e\n\n\n        \n\n    \u003c/div\u003e\n    \u003c/form\u003e\n\n\n\u003c/div\u003e\n\n                \u003c/div\u003e\n            \u003c/div\u003e\n        \n    \u003c/div\u003e\n    \u003cscript type=\"text/javascript\"\u003e\n        CRU.REVIEW.initialiseEditReview();\n        CRU.REVIEW.initialiseEditReviewEvent();\n    \u003c/script\u003e\n",
        "baseUrlSuffix": "/~user=sauce1173/clone" }
        
      1. GET request for the repository
        Request URL:[http://dude.office.atlassian.com/fisheye/cru/TST-1/edit-changelog//~user=sauce1173/clone]
        Request Method:GET
        Status Code:200 OK
        Remote Address:X.X.X.X:80
        

      It is possible that the malformed URL could cause an infinite loop if your proxy is not able to parse the "//".

      Workaround

      If the malformed URL causes an issue within your ENV. You can workaround this issue by:
      Adding content by using the plus symbol "+" from the Review Details Page on the lefthand Side[{

      Attachments

        Activity

          People

            Unassigned Unassigned
            lroscillo Lonnie
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: