You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "Markus Thies (JIRA)" <ji...@apache.org> on 2012/10/12 20:03:02 UTC

[jira] [Created] (HTTPCORE-316) HeaderGroup clone removes headers from original

Markus Thies created HTTPCORE-316:
-------------------------------------

             Summary: HeaderGroup clone removes headers from original
                 Key: HTTPCORE-316
                 URL: https://issues.apache.org/jira/browse/HTTPCORE-316
             Project: HttpComponents HttpCore
          Issue Type: Bug
          Components: HttpCore
    Affects Versions: 4.2.2
         Environment: All platforms
            Reporter: Markus Thies


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;
    }



--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org


[jira] [Resolved] (HTTPCORE-316) HeaderGroup clone removes headers from original

Posted by "Oleg Kalnichevski (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/HTTPCORE-316?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Oleg Kalnichevski resolved HTTPCORE-316.
----------------------------------------

       Resolution: Fixed
    Fix Version/s: 4.2.3

Good catch. Thank you, Markus. Fixed committed to both trunk and 4.2.x branch.

Oleg
                
> HeaderGroup clone removes headers from original
> -----------------------------------------------
>
>                 Key: HTTPCORE-316
>                 URL: https://issues.apache.org/jira/browse/HTTPCORE-316
>             Project: HttpComponents HttpCore
>          Issue Type: Bug
>          Components: HttpCore
>    Affects Versions: 4.2.2
>         Environment: All platforms
>            Reporter: Markus Thies
>              Labels: HeaderGroup, patch
>             Fix For: 4.2.3
>
>   Original Estimate: 2h
>  Remaining Estimate: 2h
>
> 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;
>     }

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org