From cfd3c03cda7ec6a100e47cfbb1971f035fae5fd6 Mon Sep 17 00:00:00 2001 From: nulltoken Date: Sat, 7 Sep 2013 20:57:51 +0200 Subject: [PATCH] Small refactoring --- LibGit2Sharp/OdbBackend.cs | 30 ++++++++++++++++++------------ LibGit2Sharp/OdbBackendStream.cs | 14 +++++++------- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/LibGit2Sharp/OdbBackend.cs b/LibGit2Sharp/OdbBackend.cs index 76551cec0..35a4c6af3 100644 --- a/LibGit2Sharp/OdbBackend.cs +++ b/LibGit2Sharp/OdbBackend.cs @@ -393,10 +393,7 @@ private static OdbBackend MarshalOdbBackend(IntPtr backendPtr) UIntPtr len, GitObjectType type) { - if (len.ToUInt64() > long.MaxValue) - { - return (int)GitErrorCode.Error; - } + long length = ConverToLong(len); OdbBackend odbBackend = MarshalOdbBackend(backend); if (odbBackend == null) @@ -406,9 +403,9 @@ private static OdbBackend MarshalOdbBackend(IntPtr backendPtr) try { - using (var stream = new UnmanagedMemoryStream((byte*)data, (long)len.ToUInt64())) + using (var stream = new UnmanagedMemoryStream((byte*)data, length)) { - return odbBackend.Write(new ObjectId(oid), stream, (long)len.ToUInt64(), type.ToObjectType()); + return odbBackend.Write(new ObjectId(oid), stream, length, type.ToObjectType()); } } catch (Exception ex) @@ -421,15 +418,12 @@ private static OdbBackend MarshalOdbBackend(IntPtr backendPtr) private static int WriteStream( out IntPtr stream_out, IntPtr backend, - UIntPtr length, + UIntPtr len, GitObjectType type) { stream_out = IntPtr.Zero; - if (length.ToUInt64() > long.MaxValue) - { - return (int)GitErrorCode.Error; - } + long length = ConverToLong(len); OdbBackend odbBackend = MarshalOdbBackend(backend); if (odbBackend == null) @@ -442,7 +436,7 @@ private static OdbBackend MarshalOdbBackend(IntPtr backendPtr) try { OdbBackendStream stream; - int toReturn = odbBackend.WriteStream((long)length.ToUInt64(), objectType, out stream); + int toReturn = odbBackend.WriteStream(length, objectType, out stream); if (toReturn == 0) { @@ -578,6 +572,18 @@ private unsafe int CallbackMethod(ObjectId id) } } + internal static long ConverToLong(UIntPtr len) + { + if (len.ToUInt64() > long.MaxValue) + { + throw new InvalidOperationException( + string.Format("Provided length ({0}) exceeds long.MaxValue ({1}).", + len.ToUInt64(), long.MaxValue)); + } + + return (long)len.ToUInt64(); + } + /// /// Flags used by subclasses of OdbBackend to indicate which operations they support. /// diff --git a/LibGit2Sharp/OdbBackendStream.cs b/LibGit2Sharp/OdbBackendStream.cs index 570917ce9..6397b7bb3 100644 --- a/LibGit2Sharp/OdbBackendStream.cs +++ b/LibGit2Sharp/OdbBackendStream.cs @@ -145,14 +145,15 @@ private static class BackendStreamEntryPoints { OdbBackendStream odbBackendStream = GCHandle.FromIntPtr(Marshal.ReadIntPtr(stream, GitOdbBackendStream.GCHandleOffset)).Target as OdbBackendStream; - if (odbBackendStream != null && - len.ToUInt64() < long.MaxValue) + if (odbBackendStream != null) { - using (UnmanagedMemoryStream memoryStream = new UnmanagedMemoryStream((byte*)buffer, 0, (long)len.ToUInt64(), FileAccess.ReadWrite)) + long length = OdbBackend.ConverToLong(len); + + using (UnmanagedMemoryStream memoryStream = new UnmanagedMemoryStream((byte*)buffer, 0, length, FileAccess.ReadWrite)) { try { - return odbBackendStream.Read(memoryStream, (long)len.ToUInt64()); + return odbBackendStream.Read(memoryStream, length); } catch (Exception ex) { @@ -171,10 +172,9 @@ private static class BackendStreamEntryPoints { OdbBackendStream odbBackendStream = GCHandle.FromIntPtr(Marshal.ReadIntPtr(stream, GitOdbBackendStream.GCHandleOffset)).Target as OdbBackendStream; - if (odbBackendStream != null && - len.ToUInt64() < long.MaxValue) + if (odbBackendStream != null) { - long length = (long)len.ToUInt64(); + long length = OdbBackend.ConverToLong(len); using (UnmanagedMemoryStream dataStream = new UnmanagedMemoryStream((byte*)buffer, length)) {