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

Reply via email to