Add missing defensive copy to APIResponse 13/5313/2
authorGary Wu <gary.i.wu@huawei.com>
Mon, 10 Apr 2017 21:12:12 +0000 (14:12 -0700)
committerGary Wu <gary.i.wu@huawei.com>
Tue, 11 Apr 2017 17:11:03 +0000 (17:11 +0000)
APIResponse is supposed to be immutable, but was exposing
its internals in the getResponseBodyAsByteArray() method.
This change adds the missing defensive copy in that method.

Change-Id: I8a424a4cb72eb703fb425ffbd30ea70d6592f85a
Signed-off-by: Gary Wu <gary.i.wu@huawei.com>
bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/APIResponse.java

index dfb9f36..ea9ca62 100644 (file)
@@ -21,6 +21,7 @@
 package org.openecomp.mso.rest;
 
 import java.io.IOException;
+import java.util.Arrays;
 
 import org.apache.http.Header;
 import org.apache.http.HttpResponse;
@@ -44,7 +45,7 @@ public class APIResponse {
      * @param httpResponse used to create headers
      * @return http headers
      */
-    private HttpHeader[] buildHeaders(final HttpResponse httpResponse) {
+    private static HttpHeader[] buildHeaders(final HttpResponse httpResponse) {
         final Header[] headers = httpResponse.getAllHeaders();
 
         HttpHeader[] httpHeaders = new HttpHeader[headers.length];
@@ -102,7 +103,12 @@ public class APIResponse {
      * @return http response body
      */
     public byte[] getResponseBodyAsByteArray() {
-        return this.responseBody;
+        // avoid exposing internals, create copy
+        if (this.responseBody != null) {
+            return Arrays.copyOf(this.responseBody, this.responseBody.length);
+        } else {
+            return null;
+        }
     }
 
     /**
@@ -125,11 +131,7 @@ public class APIResponse {
      */
     public HttpHeader[] getAllHeaders() {
         // avoid exposing internals, create copy
-        HttpHeader[] copy = new HttpHeader[this.headers.length];
-        for (int i = 0; i < this.headers.length; ++i) {
-            copy[i] = headers[i];
-        }
-        return copy;
+        return Arrays.copyOf(this.headers, this.headers.length);
     }
 
     public String getFirstHeader(String name) {