зеркало из https://github.com/mono/ikvm-fork.git
Prep for .NET 4.0 security model:
- serialization methods must be critical.
This commit is contained in:
Родитель
617dc0c7e0
Коммит
562b15ceb2
|
@ -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);
|
||||
|
|
Загрузка…
Ссылка в новой задаче