Prep for .NET 4.0 security model:

- serialization methods must be critical.
This commit is contained in:
jfrijters 2010-04-12 04:17:39 +00:00
Родитель 617dc0c7e0
Коммит 562b15ceb2
6 изменённых файлов: 12 добавлений и 0 удалений

Просмотреть файл

@ -58,12 +58,14 @@ public final class ExceptionHelper
@cli.System.SerializableAttribute.Annotation
private static final class Helper implements IObjectReference
{
@cli.System.Security.SecurityCriticalAttribute.Annotation
public Object GetRealObject(StreamingContext context)
{
return EXCEPTION_DATA_KEY;
}
}
@cli.System.Security.SecurityCriticalAttribute.Annotation
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.SetType(ikvm.runtime.Util.getInstanceTypeFromClass(Helper.class));

Просмотреть файл

@ -45,6 +45,7 @@ public final class InteropObjectOutputStream extends ObjectOutputStream
{
private Object obj;
@cli.System.Security.SecurityCriticalAttribute.Annotation
public Object GetRealObject(StreamingContext context)
{
return obj;

Просмотреть файл

@ -77,6 +77,7 @@ final class ClassSerializationProxy implements IObjectReference
private cli.System.Type type;
private String sig;
@cli.System.Security.SecurityCriticalAttribute.Annotation
public Object GetRealObject(StreamingContext context)
{
if (sig != null)
@ -214,6 +215,7 @@ public final
// Note that we don't implement ISerializable in this source, but in map.xml to avoid it being visible to Java code.
// We don't have a security demand, because the information exposed is harmless.
@cli.IKVM.Attributes.HideFromJavaAttribute.Annotation
@cli.System.Security.SecurityCriticalAttribute.Annotation
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("type", type);

Просмотреть файл

@ -240,6 +240,7 @@ public abstract class Enum<E extends Enum<E>>
// [IKVM] .NET serialization support starts here
// Note that we don't have a security demand, because the info is harmless.
@cli.IKVM.Attributes.HideFromJavaAttribute.Annotation
@cli.System.Security.SecurityCriticalAttribute.Annotation
public final void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("enumType", getDeclaringClass());
@ -254,6 +255,7 @@ final class EnumSerializationProxy implements IObjectReference
private Class enumType;
private String name;
@cli.System.Security.SecurityCriticalAttribute.Annotation
public Object GetRealObject(StreamingContext context)
{
try

Просмотреть файл

@ -1331,6 +1331,7 @@
<parameter>Demand</parameter>
<property name="SerializationFormatter" sig="Z">true</property>
</attribute>
<attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
<attribute type="IKVM.Attributes.HideFromJavaAttribute" sig="()V" />
<attribute type="System.ComponentModel.EditorBrowsableAttribute" sig="(Lcli.System.ComponentModel.EditorBrowsableState;)V">
<parameter>Never</parameter>

Просмотреть файл

@ -40,6 +40,7 @@ namespace IKVM.Internal
public static class Serialization
{
private static readonly CustomAttributeBuilder serializableAttribute = new CustomAttributeBuilder(JVM.Import(typeof(SerializableAttribute)).GetConstructor(Type.EmptyTypes), new object[0]);
private static readonly CustomAttributeBuilder securityCriticalAttribute = new CustomAttributeBuilder(JVM.Import(typeof(SecurityCriticalAttribute)).GetConstructor(Type.EmptyTypes), new object[0]);
private static readonly TypeWrapper iserializable = ClassLoaderWrapper.GetWrapperFromType(JVM.Import(typeof(ISerializable)));
private static readonly TypeWrapper iobjectreference = ClassLoaderWrapper.GetWrapperFromType(JVM.Import(typeof(IObjectReference)));
private static readonly TypeWrapper serializable = ClassLoaderWrapper.LoadClassCritical("java.io.Serializable");
@ -159,6 +160,7 @@ namespace IKVM.Internal
tb.AddInterfaceImplementation(JVM.Import(typeof(ISerializable)));
MethodBuilder getObjectData = tb.DefineMethod("GetObjectData", MethodAttributes.Family | MethodAttributes.Virtual | MethodAttributes.NewSlot, null,
new Type[] { JVM.Import(typeof(SerializationInfo)), JVM.Import(typeof(StreamingContext)) });
getObjectData.SetCustomAttribute(securityCriticalAttribute);
AttributeHelper.HideFromJava(getObjectData);
getObjectData.AddDeclarativeSecurity(SecurityAction.Demand, psetSerializationFormatter);
tb.DefineMethodOverride(getObjectData, JVM.Import(typeof(ISerializable)).GetMethod("GetObjectData"));
@ -211,6 +213,7 @@ namespace IKVM.Internal
tb.AddInterfaceImplementation(JVM.Import(typeof(IObjectReference)));
MethodBuilder getRealObject = tb.DefineMethod("IObjectReference.GetRealObject", MethodAttributes.Private | MethodAttributes.Virtual | MethodAttributes.NewSlot | MethodAttributes.Final,
Types.Object, new Type[] { JVM.Import(typeof(StreamingContext)) });
getRealObject.SetCustomAttribute(securityCriticalAttribute);
AttributeHelper.HideFromJava(getRealObject);
tb.DefineMethodOverride(getRealObject, JVM.Import(typeof(IObjectReference)).GetMethod("GetRealObject"));
CodeEmitter ilgen = CodeEmitter.Create(getRealObject);
@ -227,6 +230,7 @@ namespace IKVM.Internal
tb.AddInterfaceImplementation(JVM.Import(typeof(IObjectReference)));
MethodBuilder getRealObject = tb.DefineMethod("IObjectReference.GetRealObject", MethodAttributes.Private | MethodAttributes.Virtual | MethodAttributes.NewSlot | MethodAttributes.Final,
Types.Object, new Type[] { JVM.Import(typeof(StreamingContext)) });
getRealObject.SetCustomAttribute(securityCriticalAttribute);
AttributeHelper.HideFromJava(getRealObject);
tb.DefineMethodOverride(getRealObject, JVM.Import(typeof(IObjectReference)).GetMethod("GetRealObject"));
CodeEmitter ilgen = CodeEmitter.Create(getRealObject);