Repository: incubator-reef Updated Branches: refs/heads/master 3325748dc -> f3fbffb4f
[REEF-659] Adding IsManagedBinary for CLR This adds a check to make sure no native binaries are added to the class hierarchy. JIRA: [REEF-659](https://issues.apache.org/jira/browse/REEF-659) Pull Request: This closes #432 Project: http://git-wip-us.apache.org/repos/asf/incubator-reef/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-reef/commit/f3fbffb4 Tree: http://git-wip-us.apache.org/repos/asf/incubator-reef/tree/f3fbffb4 Diff: http://git-wip-us.apache.org/repos/asf/incubator-reef/diff/f3fbffb4 Branch: refs/heads/master Commit: f3fbffb4fdc7f1c890ade7f4158ec445ef76352b Parents: 3325748 Author: Julia Wang <juw...@microsoft.com> Authored: Thu Aug 27 17:59:25 2015 -0700 Committer: Markus Weimer <wei...@apache.org> Committed: Fri Aug 28 13:22:30 2015 -0700 ---------------------------------------------------------------------- lang/cs/Org.Apache.REEF.Bridge/BinaryUtil.cpp | 2 +- lang/cs/Org.Apache.REEF.Bridge/BinaryUtil.h | 2 +- .../ClassHierarchyGeneratingDriverStartObserver.cs | 13 ++++++++++++- 3 files changed, 14 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/f3fbffb4/lang/cs/Org.Apache.REEF.Bridge/BinaryUtil.cpp ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Bridge/BinaryUtil.cpp b/lang/cs/Org.Apache.REEF.Bridge/BinaryUtil.cpp index b7c3a2e..29b01de 100644 --- a/lang/cs/Org.Apache.REEF.Bridge/BinaryUtil.cpp +++ b/lang/cs/Org.Apache.REEF.Bridge/BinaryUtil.cpp @@ -41,7 +41,7 @@ DWORD GetActualAddressFromRVA(IMAGE_SECTION_HEADER* pSectionHeader, IMAGE_NT_HEA } -BINARY_TYPE IsManagedBinary(const wchar_t* lpszImageName) { +extern "C" __declspec(dllexport) BINARY_TYPE __stdcall IsManagedBinary(const wchar_t* lpszImageName) { BINARY_TYPE binaryType = BINARY_TYPE_NONE; HANDLE hFile = CreateFile(lpszImageName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/f3fbffb4/lang/cs/Org.Apache.REEF.Bridge/BinaryUtil.h ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Bridge/BinaryUtil.h b/lang/cs/Org.Apache.REEF.Bridge/BinaryUtil.h index dc946a6..e8dfc53 100644 --- a/lang/cs/Org.Apache.REEF.Bridge/BinaryUtil.h +++ b/lang/cs/Org.Apache.REEF.Bridge/BinaryUtil.h @@ -23,4 +23,4 @@ typedef enum BINARY_TYPE { } BINARY_TYPE ; -BINARY_TYPE IsManagedBinary(const wchar_t* lpszImageName); +extern "C" __declspec(dllexport) BINARY_TYPE __stdcall IsManagedBinary(const wchar_t* lpszImageName); http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/f3fbffb4/lang/cs/Org.Apache.REEF.Driver/ClassHierarchyGeneratingDriverStartObserver.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Driver/ClassHierarchyGeneratingDriverStartObserver.cs b/lang/cs/Org.Apache.REEF.Driver/ClassHierarchyGeneratingDriverStartObserver.cs index 78f434d..5578e18 100644 --- a/lang/cs/Org.Apache.REEF.Driver/ClassHierarchyGeneratingDriverStartObserver.cs +++ b/lang/cs/Org.Apache.REEF.Driver/ClassHierarchyGeneratingDriverStartObserver.cs @@ -21,6 +21,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using System.Runtime.InteropServices; using Org.Apache.REEF.Common.Files; using Org.Apache.REEF.Common.Tasks; using Org.Apache.REEF.Driver.Bridge; @@ -113,6 +114,16 @@ namespace Org.Apache.REEF.Driver .Select(Path.GetFileNameWithoutExtension)); } + [DllImport("Org.Apache.REEF.Bridge.dll", CharSet = CharSet.Unicode, SetLastError = true)] + static extern int IsManagedBinary(string lpFileName); + + private enum BinaryType + { + None = 0, + Native = 1, + Clr = 2 + }; + /// <summary> /// </summary> /// <param name="path"></param> @@ -124,7 +135,7 @@ namespace Org.Apache.REEF.Driver return false; } var extension = Path.GetExtension(path).ToLower(); - return extension.EndsWith("dll") || extension.EndsWith("exe"); + return (extension == ".dll" || extension == ".exe") && (BinaryType.Clr == ((BinaryType)IsManagedBinary(path))); } } } \ No newline at end of file