[dotnet] sanitized pinvokes that use string (#17143)

sanitized the pinvokes that use string.
This commit is contained in:
Steve Hawley 2023-01-11 10:41:27 -05:00 коммит произвёл GitHub
Родитель 5541f48180
Коммит 553904d8a4
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
5 изменённых файлов: 31 добавлений и 13 удалений

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

@ -54,8 +54,10 @@ namespace CoreFoundation {
if (maxLength < 0)
throw new ArgumentException (nameof (maxLength));
Handle = CFStringCreateMutable (IntPtr.Zero, maxLength);
if (@string is not null)
CFStringAppendCharacters (Handle, @string, @string.Length);
if (@string is not null) {
using var stringPtr = new TransientString (@string, TransientString.Encoding.Unicode);
CFStringAppendCharacters (Handle, stringPtr, @string.Length);
}
}
[DllImport (Constants.CoreFoundationLibrary)]
@ -72,14 +74,15 @@ namespace CoreFoundation {
}
[DllImport (Constants.CoreFoundationLibrary, CharSet = CharSet.Unicode)]
static extern void CFStringAppendCharacters (/* CFMutableStringRef* */ IntPtr theString, string chars, nint numChars);
static extern void CFStringAppendCharacters (/* CFMutableStringRef* */ IntPtr theString, IntPtr chars, nint numChars);
public void Append (string @string)
{
if (@string is null)
ObjCRuntime.ThrowHelper.ThrowArgumentNullException (nameof (@string));
str = null; // destroy any cached value
CFStringAppendCharacters (Handle, @string, @string.Length);
using var stringPtr = new TransientString (@string, TransientString.Encoding.Unicode);
CFStringAppendCharacters (Handle, stringPtr, @string.Length);
}
[DllImport (Constants.CoreFoundationLibrary)]

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

@ -130,7 +130,7 @@ namespace CoreFoundation {
protected CFString () { }
[DllImport (Constants.CoreFoundationLibrary, CharSet = CharSet.Unicode)]
extern static IntPtr CFStringCreateWithCharacters (IntPtr allocator, string str, nint count);
extern static IntPtr CFStringCreateWithCharacters (IntPtr allocator, IntPtr str, nint count);
[DllImport (Constants.CoreFoundationLibrary, CharSet = CharSet.Unicode)]
extern static nint CFStringGetLength (IntPtr handle);
@ -146,7 +146,8 @@ namespace CoreFoundation {
if (value is null)
return NativeHandle.Zero;
return CFStringCreateWithCharacters (IntPtr.Zero, value, value.Length);
using var valuePtr = new TransientString (value, TransientString.Encoding.Unicode);
return CFStringCreateWithCharacters (IntPtr.Zero, valuePtr, value.Length);
}
public static void ReleaseNative (NativeHandle handle)
@ -160,7 +161,8 @@ namespace CoreFoundation {
if (str is null)
ObjCRuntime.ThrowHelper.ThrowArgumentNullException (nameof (str));
Handle = CFStringCreateWithCharacters (IntPtr.Zero, str, str.Length);
using var strPtr = new TransientString (str, TransientString.Encoding.Unicode);
Handle = CFStringCreateWithCharacters (IntPtr.Zero, strPtr, str.Length);
this.str = str;
}

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

@ -556,11 +556,16 @@ namespace CoreFoundation {
}
}
static IntPtr dispatch_queue_create (string label, IntPtr attr)
{
using var labelPtr = new TransientString (label);
return dispatch_queue_create (labelPtr, attr);
}
//
// Native methods
//
[DllImport (Constants.libcLibrary)]
extern static IntPtr dispatch_queue_create (string label, IntPtr attr);
extern static IntPtr dispatch_queue_create (IntPtr label, IntPtr attr);
#if NET
[SupportedOSPlatform ("macos")]
@ -573,8 +578,14 @@ namespace CoreFoundation {
[TV (10, 0)]
[Watch (3, 0)]
#endif
static IntPtr dispatch_queue_create_with_target (string label, IntPtr attr, IntPtr target)
{
using var labelPtr = new TransientString (label);
return dispatch_queue_create_with_target (labelPtr, attr, target);
}
[DllImport (Constants.libcLibrary, EntryPoint = "dispatch_queue_create_with_target$V2")]
extern static IntPtr dispatch_queue_create_with_target (string label, IntPtr attr, IntPtr target);
extern static IntPtr dispatch_queue_create_with_target (IntPtr label, IntPtr attr, IntPtr target);
[DllImport (Constants.libcLibrary)]
extern static void dispatch_async_f (IntPtr queue, IntPtr context, dispatch_callback_t dispatch);

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

@ -575,7 +575,7 @@ namespace CoreFoundation {
const int O_EVTONLY = 0x8000;
[DllImport (Constants.libcLibrary, SetLastError = true)]
extern static int open (string path, int flags);
extern static int open (IntPtr path, int flags);
[DllImport (Constants.libcLibrary)]
internal extern static int close (int fd);
@ -585,7 +585,8 @@ namespace CoreFoundation {
if (path is null)
ObjCRuntime.ThrowHelper.ThrowArgumentNullException (nameof (path));
fd = open (path, O_EVTONLY);
using var pathPtr = new TransientString (path);
fd = open (pathPtr, O_EVTONLY);
if (fd == -1)
throw new IOException ("Failure to open the file", Marshal.GetLastWin32Error ());
if (type_vnode == IntPtr.Zero)

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

@ -84,7 +84,7 @@ namespace CoreFoundation {
extern static void os_release (IntPtr handle);
[DllImport ("__Internal")]
extern static void xamarin_os_log (IntPtr logHandle, OSLogLevel level, string message);
extern static void xamarin_os_log (IntPtr logHandle, OSLogLevel level, IntPtr message);
[Preserve (Conditional = true)]
internal OSLog (NativeHandle handle, bool owns)
@ -112,7 +112,8 @@ namespace CoreFoundation {
if (message is null)
ObjCRuntime.ThrowHelper.ThrowArgumentNullException (nameof (message));
xamarin_os_log (Handle, level, message);
using var messagePtr = new TransientString (message);
xamarin_os_log (Handle, level, messagePtr);
}
}
}