Author: sebb
Date: Fri Mar 27 21:37:14 2009
New Revision: 759359
URL: http://svn.apache.org/viewvc?rev=759359&view=rev
Log:
Class was not thread-safe:
- external byte array was stored directly
- List was created and then modified via the final variable
Fixed by copying byte array and storing List once as unmodifiable List
Modified:
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/Simple8BitZipEncoding.java
Modified:
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/Simple8BitZipEncoding.java
URL:
http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/Simple8BitZipEncoding.java?rev=759359&r1=759358&r2=759359&view=diff
==============================================================================
---
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/Simple8BitZipEncoding.java
(original)
+++
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/Simple8BitZipEncoding.java
Fri Mar 27 21:37:14 2009
@@ -42,6 +42,7 @@
* implementation, Cp437 and Cp850.</p>
*
* <p>The methods of this class are reentrant.</p>
+ * @Immutable
*/
class Simple8BitZipEncoding implements ZipEncoding {
@@ -88,17 +89,17 @@
* stored as an array of 128 chars.
*/
public Simple8BitZipEncoding(char[] highChars) {
- this.highChars = highChars;
- this.reverseMapping = new ArrayList(this.highChars.length);
+ this.highChars = (char[]) highChars.clone();
+ List temp = new ArrayList(this.highChars.length);
byte code = 127;
for (int i = 0; i < this.highChars.length; ++i) {
- this.reverseMapping.add(new Simple8BitChar(++code,
- this.highChars[i]));
+ temp.add(new Simple8BitChar(++code, this.highChars[i]));
}
- Collections.sort(this.reverseMapping);
+ Collections.sort(temp);
+ this.reverseMapping = Collections.unmodifiableList(temp);
}
/**