Skip to content

Commit d623e3e

Browse files
committed
Tweaks
1 parent f218572 commit d623e3e

File tree

4 files changed

+53
-30
lines changed

4 files changed

+53
-30
lines changed

LibGit2Sharp.Tests/GlobalSettingsFixture.cs

+5-5
Original file line numberDiff line numberDiff line change
@@ -107,15 +107,15 @@ public void SetExtensions()
107107
public void OwnerValidation()
108108
{
109109
// Assert that owner validation is enabled by default
110-
Assert.True(GlobalSettings.OwnerValidation);
110+
Assert.True(GlobalSettings.GetOwnerValidation());
111111

112112
// Disable owner validation
113-
GlobalSettings.OwnerValidation = false;
114-
Assert.False(GlobalSettings.OwnerValidation);
113+
GlobalSettings.SetOwnerValidation(false);
114+
Assert.False(GlobalSettings.GetOwnerValidation());
115115

116116
// Enable it again
117-
GlobalSettings.OwnerValidation = true;
118-
Assert.True(GlobalSettings.OwnerValidation);
117+
GlobalSettings.SetOwnerValidation(true);
118+
Assert.True(GlobalSettings.GetOwnerValidation());
119119
}
120120
}
121121
}

LibGit2Sharp/Core/NativeMethods.cs

+12-8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
using System;
22
using System.IO;
3+
#if NET
34
using System.Reflection;
5+
#endif
46
using System.Runtime.CompilerServices;
57
using System.Runtime.ConstrainedExecution;
68
using System.Runtime.InteropServices;
@@ -743,13 +745,10 @@ internal static extern int git_libgit2_opts(int option, uint level,
743745
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalCookie = UniqueId.UniqueIdentifier, MarshalTypeRef = typeof(StrictUtf8Marshaler))] string path);
744746

745747
// git_libgit2_opts(GIT_OPT_ENABLE_*, int enabled)
748+
// git_libgit2_opts(GIT_OPT_SET_OWNER_VALIDATION, int enabled)
746749
[DllImport(libgit2, CallingConvention = CallingConvention.Cdecl)]
747750
internal static extern int git_libgit2_opts(int option, int enabled);
748751

749-
// git_libgit2_opts(GIT_OPT_GET_*, int *enabled)
750-
[DllImport(libgit2, CallingConvention = CallingConvention.Cdecl)]
751-
internal static extern unsafe int git_libgit2_opts(int option, int* enabled);
752-
753752
// git_libgit2_opts(GIT_OPT_SET_USER_AGENT, const char *path)
754753
[DllImport(libgit2, CallingConvention = CallingConvention.Cdecl)]
755754
internal static extern int git_libgit2_opts(int option,
@@ -766,6 +765,10 @@ internal static extern int git_libgit2_opts(int option,
766765
// git_libgit2_opts(GIT_OPT_GET_EXTENSIONS, git_strarray *out)
767766
[DllImport(libgit2, CallingConvention = CallingConvention.Cdecl)]
768767
internal static extern int git_libgit2_opts(int option, out GitStrArray extensions);
768+
769+
// git_libgit2_opts(GIT_OPT_GET_OWNER_VALIDATION, int *enabled)
770+
[DllImport(libgit2, CallingConvention = CallingConvention.Cdecl)]
771+
internal static extern unsafe int git_libgit2_opts(int option, int* enabled);
769772
#endregion
770773

771774
#region git_libgit2_opts_osxarm64
@@ -783,13 +786,10 @@ internal static extern int git_libgit2_opts_osxarm64(int option, IntPtr nop2, In
783786
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalCookie = UniqueId.UniqueIdentifier, MarshalTypeRef = typeof(StrictUtf8Marshaler))] string path);
784787

785788
// git_libgit2_opts(GIT_OPT_ENABLE_*, int enabled)
789+
// git_libgit2_opts(GIT_OPT_SET_OWNER_VALIDATION, int enabled)
786790
[DllImport(libgit2, CallingConvention = CallingConvention.Cdecl, EntryPoint = "git_libgit2_opts")]
787791
internal static extern int git_libgit2_opts_osxarm64(int option, IntPtr nop2, IntPtr nop3, IntPtr nop4, IntPtr nop5, IntPtr nop6, IntPtr nop7, IntPtr nop8, int enabled);
788792

789-
// git_libgit2_opts(GIT_OPT_GET_*, int enabled)
790-
[DllImport(libgit2, CallingConvention = CallingConvention.Cdecl, EntryPoint = "git_libgit2_opts")]
791-
internal static extern unsafe int git_libgit2_opts_osxarm64(int option, IntPtr nop2, IntPtr nop3, IntPtr nop4, IntPtr nop5, IntPtr nop6, IntPtr nop7, IntPtr nop8, int* enabled);
792-
793793
// git_libgit2_opts(GIT_OPT_SET_USER_AGENT, const char *path)
794794
[DllImport(libgit2, CallingConvention = CallingConvention.Cdecl, EntryPoint = "git_libgit2_opts")]
795795
internal static extern int git_libgit2_opts_osxarm64(int option, IntPtr nop2, IntPtr nop3, IntPtr nop4, IntPtr nop5, IntPtr nop6, IntPtr nop7, IntPtr nop8,
@@ -806,6 +806,10 @@ internal static extern int git_libgit2_opts_osxarm64(int option, IntPtr nop2, In
806806
// git_libgit2_opts(GIT_OPT_GET_EXTENSIONS, git_strarray *out)
807807
[DllImport(libgit2, CallingConvention = CallingConvention.Cdecl, EntryPoint = "git_libgit2_opts")]
808808
internal static extern int git_libgit2_opts_osxarm64(int option, IntPtr nop2, IntPtr nop3, IntPtr nop4, IntPtr nop5, IntPtr nop6, IntPtr nop7, IntPtr nop8, out GitStrArray extensions);
809+
810+
// git_libgit2_opts(GIT_OPT_GET_OWNER_VALIDATION, int *enabled)
811+
[DllImport(libgit2, CallingConvention = CallingConvention.Cdecl, EntryPoint = "git_libgit2_opts")]
812+
internal static extern unsafe int git_libgit2_opts_osxarm64(int option, IntPtr nop2, IntPtr nop3, IntPtr nop4, IntPtr nop5, IntPtr nop6, IntPtr nop7, IntPtr nop8, int* enabled);
809813
#endregion
810814

811815
[DllImport(libgit2, CallingConvention = CallingConvention.Cdecl)]

LibGit2Sharp/Core/Proxy.cs

+15-4
Original file line numberDiff line numberDiff line change
@@ -3577,13 +3577,20 @@ public static string[] git_libgit2_opts_get_extensions()
35773577
/// </summary>
35783578
public static unsafe bool git_libgit2_opts_get_owner_validation()
35793579
{
3580-
// libgit2 expects non-zero value for true
3581-
int res, enabled;
3580+
int res;
3581+
int enabled;
3582+
35823583
if (isOSXArm64)
3584+
{
35833585
res = NativeMethods.git_libgit2_opts_osxarm64((int)LibGit2Option.GetOwnerValidation, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, &enabled);
3586+
}
35843587
else
3588+
{
35853589
res = NativeMethods.git_libgit2_opts((int)LibGit2Option.GetOwnerValidation, &enabled);
3590+
}
3591+
35863592
Ensure.ZeroResult(res);
3593+
35873594
return enabled != 0;
35883595
}
35893596

@@ -3593,15 +3600,19 @@ public static unsafe bool git_libgit2_opts_get_owner_validation()
35933600
/// <param name="enabled">true to enable owner validation, false otherwise</param>
35943601
public static void git_libgit2_opts_set_owner_validation(bool enabled)
35953602
{
3596-
// libgit2 expects non-zero value for true
35973603
int res;
3604+
35983605
if (isOSXArm64)
3606+
{
35993607
res = NativeMethods.git_libgit2_opts_osxarm64((int)LibGit2Option.SetOwnerValidation, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, enabled ? 1 : 0);
3608+
}
36003609
else
3610+
{
36013611
res = NativeMethods.git_libgit2_opts((int)LibGit2Option.SetOwnerValidation, enabled ? 1 : 0);
3612+
}
3613+
36023614
Ensure.ZeroResult(res);
36033615
}
3604-
36053616
#endregion
36063617

36073618
#region git_worktree_

LibGit2Sharp/GlobalSettings.cs

+21-13
Original file line numberDiff line numberDiff line change
@@ -204,19 +204,6 @@ public static string NativeLibraryPath
204204
}
205205
}
206206

207-
/// <summary>
208-
/// Controls the status of repository directory owner validation.
209-
/// </summary>
210-
/// <remarks>
211-
/// By default, repository directories must be owned by the current user to be opened. This can be disabled by setting this property to false.
212-
/// Note that disabling this can lead to security vulnerabilities (see CVE-2022-24765).
213-
/// </remarks>
214-
public static bool OwnerValidation
215-
{
216-
get => Proxy.git_libgit2_opts_get_owner_validation();
217-
set => Proxy.git_libgit2_opts_set_owner_validation(value);
218-
}
219-
220207
internal static string GetAndLockNativeLibraryPath()
221208
{
222209
nativeLibraryPathLocked = true;
@@ -430,5 +417,26 @@ public static string GetUserAgent()
430417
{
431418
return Proxy.git_libgit2_opts_get_user_agent();
432419
}
420+
421+
/// <summary>
422+
/// Gets the owner validation setting for repository directories.
423+
/// </summary>
424+
/// <returns></returns>
425+
public static bool GetOwnerValidation()
426+
{
427+
return Proxy.git_libgit2_opts_get_owner_validation();
428+
}
429+
430+
/// <summary>
431+
/// Sets whether repository directories should be owned by the current user. The default is to validate ownership.
432+
/// </summary>
433+
/// <remarks>
434+
/// Disabling owner validation can lead to security vulnerabilities (see CVE-2022-24765).
435+
/// </remarks>
436+
/// <param name="enabled">true to enable owner validation; otherwise, false.</param>
437+
public static void SetOwnerValidation(bool enabled)
438+
{
439+
Proxy.git_libgit2_opts_set_owner_validation(enabled);
440+
}
433441
}
434442
}

0 commit comments

Comments
 (0)