Uploaded image for project: 'HttpComponents HttpCore'
  1. HttpComponents HttpCore
  2. HTTPCORE-316

HeaderGroup clone removes headers from original

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 4.2.2
    • 4.2.3
    • HttpCore
    • All platforms

    Description

      The class org.apache.http.message.HeaderGroup provides a method clone().
      If clone is called the original object's headers are removed.

      The root cause of this is, that the class HeaderGroup has only one attribute (headers) which is a List.
      As clone does a shallow copy the List is not cloned (that is correct).
      But within the method clone(), the headers of the newly created clone are removed (by calling clear()) but they actually also clear the headers of the original object (since it is not a copy).

      So this leads to very tricky problems in code where the headers are essential to be available in the clone and in the original object.

      Original code:
      public Object clone() throws CloneNotSupportedException

      { HeaderGroup clone = (HeaderGroup) super.clone(); clone.headers.clear(); clone.headers.addAll(this.headers); return clone; }

      Corrected code:
      public Object clone() throws CloneNotSupportedException

      { HeaderGroup clone = (HeaderGroup) super.clone(); //BUG: would also clear the headers original //clone.headers.clear(); //clone.headers.addAll(this.headers); return clone; }

      Attachments

        Activity

          People

            Unassigned Unassigned
            mthies Markus Thies
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Time Tracking

                Estimated:
                Original Estimate - 2h
                2h
                Remaining:
                Remaining Estimate - 2h
                2h
                Logged:
                Time Spent - Not Specified
                Not Specified