[prev in list] [next in list] [prev in thread] [next in thread] 

List:       httpclient-commons-dev
Subject:    [jira] [Commented] (HTTPCORE-316) HeaderGroup clone removes headers from original
From:       "Oleg Kalnichevski (JIRA)" <jira () apache ! org>
Date:       2016-04-10 13:00:27
Message-ID: JIRA.12611566.1350064879000.187097.1460293227518 () Atlassian ! JIRA
[Download RAW message or body]


    [ https://issues.apache.org/jira/browse/HTTPCORE-316?page=com.atlassian.jira.plugi \
n.system.issuetabpanels:comment-tabpanel&focusedCommentId=15234109#comment-15234109 ] \


Oleg Kalnichevski commented on HTTPCORE-316:
--------------------------------------------

Given that both methods are now gone in 5.0 and given that there is HeaderGroup#copy \
in 4.4, I leave HeaderGroup#clone as is.

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 was sent by Atlassian JIRA
(v6.3.4#6332)

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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic