From e5d0a57d978217424d9e878e0309bbf0bfc3c02c Mon Sep 17 00:00:00 2001
From: Brian Carrier <carrier@sleuthkit.org>
Date: Wed, 6 Jul 2011 19:49:54 +0000
Subject: [PATCH] Minor updates to JNI code

---
 bindings/java/jni/dataModel_SleuthkitJNI.cpp | 75 +++++++++++++++-----
 bindings/java/jni/tskAutoDbJNI.h             | 17 +++--
 tools/autotools/tsk_comparedir.h             |  5 ++
 win32/tsk_jni/tsk_jni.vcproj                 |  4 +-
 4 files changed, 75 insertions(+), 26 deletions(-)

diff --git a/bindings/java/jni/dataModel_SleuthkitJNI.cpp b/bindings/java/jni/dataModel_SleuthkitJNI.cpp
index afea992bc..ba30afe49 100644
--- a/bindings/java/jni/dataModel_SleuthkitJNI.cpp
+++ b/bindings/java/jni/dataModel_SleuthkitJNI.cpp
@@ -1,10 +1,19 @@
+/*
+ ** dataModel_SleuthkitJNI
+ ** The Sleuth Kit 
+ **
+ ** Brian Carrier [carrier <at> sleuthkit [dot] org]
+ ** Copyright (c) 2010-2011 Brian Carrier.  All Rights reserved
+ **
+ ** This software is distributed under the Common Public License 1.0
+ **
+ */
+#include "tsk3/tsk_tools_i.h"
 #include "jni.h"
 #include "dataModel_SleuthkitJNI.h"
-#include "tsk3/libtsk.h"
-#include "tsk3/tsk_tools_i.h"
 #include "tskAutoDbJNI.h"
-#include "tsk3/auto/tsk_auto_i.h"
-#include "tsk3/auto/tsk_auto.h"
+#include <locale.h>
+#include <time.h>
 
 
 TskAutoDbJNI::TskAutoDbJNI(){
@@ -13,28 +22,32 @@ TskAutoDbJNI::TskAutoDbJNI(){
 }
 
 
-TSK_RETVAL_ENUM TskAutoDbJNI::processFile(TSK_FS_FILE * fs_file,
-        const char *path){
-            if(m_cancelled)
-                return TSK_STOP;
-            else
-                return TskAutoDb::processFile(fs_file, path);
-    }
+TSK_RETVAL_ENUM 
+TskAutoDbJNI::processFile(TSK_FS_FILE * fs_file,
+                                          const char *path) {
+    if(m_cancelled)
+        return TSK_STOP;
+    else
+        return TskAutoDb::processFile(fs_file, path);
+}
 void TskAutoDbJNI::cancelProcess(){
     m_cancelled = true;
 }
 
-/* Throw and exception to java
- * @param the java environment to send the exception to
- */
-static void throwTskError(JNIEnv *env){
 
+static void throwTskError(JNIEnv *env, const char *msg){
     jclass exception;
     exception = env->FindClass("org/sleuthkit/datamodel/TskException");
 
-    const char* msg = tsk_error_get();
     env->ThrowNew(exception, msg);
+}
 
+/* Throw and exception to java
+ * @param the java environment to send the exception to
+ */
+static void throwTskError(JNIEnv *env){
+    const char* msg = tsk_error_get();
+    throwTskError(env, msg);
 }
 
 /*
@@ -239,6 +252,7 @@ JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_openVolNat
 (JNIEnv * env, jclass obj, jlong vs_info, jlong vol_id){
     TSK_VS_INFO * vsInfo = (TSK_VS_INFO *) vs_info;
     TSK_VS_PART_INFO * volInfo;
+
     volInfo = (TSK_VS_PART_INFO *) tsk_vs_part_get(vsInfo, (TSK_PNUM_T) vol_id);
     if(volInfo == NULL){
         throwTskError(env);
@@ -259,6 +273,7 @@ JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_openFsNat
     fsInfo = tsk_fs_open_img(img, (TSK_OFF_T) fs_offset /** img->sector_size*/, TSK_FS_TYPE_DETECT);
     if(fsInfo == NULL){
         throwTskError(env);
+        return NULL;
     }
     return (jlong)fsInfo;
 }
@@ -273,6 +288,11 @@ JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_openFileNat
     TSK_FS_INFO * fs = (TSK_FS_INFO *) fs_info;
     TSK_FS_FILE * file;
 
+    if (fs->tag != TSK_FS_INFO_TAG) {
+        throwTskError(env, "openFile: Invalid FS_INFO object"); 
+        return NULL;
+    }
+
     file = tsk_fs_file_open_meta(fs, NULL, (TSK_INUM_T) file_id);
     if(file == NULL){
         throwTskError(env);
@@ -400,7 +420,12 @@ JNIEXPORT jbyteArray JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_readFsNat
         throwTskError(env);
         return NULL;
     }
+
     TSK_FS_INFO * fs = (TSK_FS_INFO *) fs_info;
+    if (fs->tag != TSK_FS_INFO_TAG) {
+        throwTskError(env, "readFsNat: Invalid TSK_FS_INFO object");
+        return NULL;
+    }
 
     ssize_t retval = tsk_fs_read(fs, (TSK_OFF_T) offset, buf, (size_t) len);
 
@@ -437,6 +462,10 @@ JNIEXPORT jbyteArray JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_readFileN
         return NULL;
     }
     TSK_FS_FILE * file = (TSK_FS_FILE *) file_info;
+    if (file->tag != TSK_FS_FILE_TAG) {
+        throwTskError(env, "readFile: Invalid TSK_FS_FILE address");
+        return NULL;
+    }
 
     ssize_t retval = tsk_fs_file_read(file, (TSK_OFF_T) offset, buf, (size_t) len, TSK_FS_FILE_READ_FLAG_NONE);
 
@@ -495,8 +524,12 @@ JNIEXPORT void JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_closeVolNat
 * Signature: ()V
 */
 JNIEXPORT void JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_closeFsNat
-(JNIEnv * env, jclass obj, jlong fs_info){
-    tsk_fs_close((TSK_FS_INFO *) fs_info);
+(JNIEnv * env, jclass obj, jlong a_fs_info){
+    TSK_FS_INFO *fs_info = (TSK_FS_INFO *)a_fs_info;
+    if (fs_info->tag != TSK_FS_INFO_TAG) {
+        return;
+    }
+    tsk_fs_close(fs_info);
 }
 
 /*
@@ -506,7 +539,11 @@ JNIEXPORT void JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_closeFsNat
 */
 JNIEXPORT void JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_closeFileNat
 (JNIEnv * env, jclass obj, jlong file_info){
-    tsk_fs_file_close((TSK_FS_FILE *) file_info);
+    TSK_FS_FILE *file = (TSK_FS_FILE *)file_info;
+    if (file->tag != TSK_FS_FILE_TAG) {
+        return;
+    }
+    tsk_fs_file_close(file);
 }
 
 /*
diff --git a/bindings/java/jni/tskAutoDbJNI.h b/bindings/java/jni/tskAutoDbJNI.h
index 7c5e1b2f2..f06511067 100644
--- a/bindings/java/jni/tskAutoDbJNI.h
+++ b/bindings/java/jni/tskAutoDbJNI.h
@@ -1,8 +1,15 @@
+#ifndef _TSK_AUTODB_JNI_H
+#define _TSK_AUTODB_JNI_H
+
 class TskAutoDbJNI:public TskAutoDb {
-  public:
-      bool m_cancelled;
-      TskAutoDbJNI();
-      virtual TSK_RETVAL_ENUM processFile(TSK_FS_FILE * fs_file,
+private:
+    bool m_cancelled;
+
+public:  
+    TskAutoDbJNI();
+    virtual TSK_RETVAL_ENUM processFile(TSK_FS_FILE * fs_file,
         const char *path);
-      void cancelProcess();
+    void cancelProcess();
 };
+
+#endif
\ No newline at end of file
diff --git a/tools/autotools/tsk_comparedir.h b/tools/autotools/tsk_comparedir.h
index 899945caa..e0ff6bec4 100644
--- a/tools/autotools/tsk_comparedir.h
+++ b/tools/autotools/tsk_comparedir.h
@@ -1,3 +1,6 @@
+#ifndef _TSK_COMPAREDIR_H
+#define _TSK_COMPAREDIR_H
+
 #include <set>
 #include <stdlib.h>
 
@@ -22,3 +25,5 @@ class TskCompareDir : public TskAuto {
 	virtual TSK_FILTER_ENUM filterVol(const TSK_VS_PART_INFO * vs_part);
     uint8_t processLclDir(const TSK_TCHAR *dir);
 };
+
+#endif
\ No newline at end of file
diff --git a/win32/tsk_jni/tsk_jni.vcproj b/win32/tsk_jni/tsk_jni.vcproj
index c0418daa3..615e3efe5 100644
--- a/win32/tsk_jni/tsk_jni.vcproj
+++ b/win32/tsk_jni/tsk_jni.vcproj
@@ -42,7 +42,7 @@
 				Name="VCCLCompilerTool"
 				Optimization="0"
 				AdditionalIncludeDirectories="&quot;$(JDK_HOME)\include&quot;;&quot;$(JDK_HOME)\include\win32&quot;;&quot;$(ProjectDir)\..\..&quot;"
-				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;TSK_JNI_EXPORTS"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;TSK_JNI_EXPORTS;_CRT_SECURE_NO_WARNINGS"
 				MinimalRebuild="true"
 				BasicRuntimeChecks="3"
 				RuntimeLibrary="3"
@@ -122,7 +122,7 @@
 				Optimization="2"
 				EnableIntrinsicFunctions="true"
 				AdditionalIncludeDirectories="&quot;$(JDK_HOME)\include&quot;;&quot;$(JDK_HOME)\include\win32&quot;;&quot;$(ProjectDir)\..\..&quot;"
-				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;TSK_JNI_EXPORTS"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;TSK_JNI_EXPORTS;_CRT_SECURE_NO_WARNINGS"
 				RuntimeLibrary="2"
 				EnableFunctionLevelLinking="true"
 				UsePrecompiledHeader="0"
-- 
GitLab