OPENJPA-237 Copy aliases array so it can't get modified by reference

git-svn-id: https://svn.apache.org/repos/asf/incubator/openjpa/trunk@540199 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Marc Prud'hommeaux 2007-05-21 16:35:28 +00:00
parent 81e89bcd80
commit e041fe0d4d
2 changed files with 44 additions and 1 deletions

View File

@ -100,9 +100,13 @@ public abstract class Value implements Cloneable {
/** /**
* Aliases for the value in the form key1, value1, key2, value2, ... * Aliases for the value in the form key1, value1, key2, value2, ...
* All alias values must be in string form. * All alias values must be in string form.
* <p>
* To avoid potential side-effects, this method copies the array passed in.
*/ */
public void setAliases(String[] aliases) { public void setAliases(String[] aliases) {
this.aliases = aliases; String [] aStrings = new String[aliases.length];
System.arraycopy(aliases, 0, aStrings, 0, aStrings.length);
this.aliases = aStrings;
} }
/** /**

View File

@ -0,0 +1,39 @@
package org.apache.openjpa.lib.conf;
import junit.framework.TestCase;
public class TestValue extends TestCase {
private static class SimpleValue extends Value {
protected String getInternalString() {
return null;
}
public Class getValueType() {
return null;
}
protected void setInternalObject(Object obj) {
}
protected void setInternalString(String str) {
}
}
public void testSetAliasesByValue() {
String alias = "alias";
String aName = "Johnny";
String bName = "Pete";
String [] aStrings = { alias, aName };
SimpleValue sValue = new SimpleValue();
sValue.setAliases(aStrings);
sValue.setAlias(alias, bName);
assertEquals("Did not set the new alias", bName,
sValue.getAliases()[1]);
assertEquals("Array of aliases not set by value", aName, aStrings[1]);
}
}