From c872d43f9cf000a34447c18bcb83ec33b2404a3e Mon Sep 17 00:00:00 2001 From: Brian Carrier <carrier@sleuthkit.org> Date: Thu, 7 Mar 2019 14:44:35 -0500 Subject: [PATCH] Added image writer type checks and made finish public method --- bindings/java/jni/dataModel_SleuthkitJNI.cpp | 7 +---- tsk/img/img_writer.cpp | 30 +++++++++++++++++++- tsk/img/img_writer.h | 3 +- 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/bindings/java/jni/dataModel_SleuthkitJNI.cpp b/bindings/java/jni/dataModel_SleuthkitJNI.cpp index 908c709b3..75ff69cb0 100644 --- a/bindings/java/jni/dataModel_SleuthkitJNI.cpp +++ b/bindings/java/jni/dataModel_SleuthkitJNI.cpp @@ -2188,12 +2188,7 @@ JNIEXPORT jint JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_finishImageWrit (JNIEnv * env, jclass obj, jlong a_img_info) { // Set up the TSK_IMG_INFO object TSK_IMG_INFO *img_info = castImgInfo(env, a_img_info); - IMG_RAW_INFO *raw_info = (IMG_RAW_INFO*)img_info; - - if (raw_info->img_writer != NULL) { - return raw_info->img_writer->finish_image(raw_info->img_writer); - } - return -1; + return tsk_img_writer_finish(img_info); } /* diff --git a/tsk/img/img_writer.cpp b/tsk/img/img_writer.cpp index 2ec1ab322..fc33af585 100644 --- a/tsk/img/img_writer.cpp +++ b/tsk/img/img_writer.cpp @@ -601,7 +601,7 @@ static TSK_RETVAL_ENUM tsk_img_writer_finish_image(TSK_IMG_WRITER* img_writer) { * @param img_info the TSK_IMG_INFO object * @param outputFileName path to the VHD */ -TSK_RETVAL_ENUM tsk_img_writer_create(TSK_IMG_INFO * img_info, const TSK_TCHAR * outputFileName) { +TSK_RETVAL_ENUM tsk_img_writer_create(TSK_IMG_INFO *img_info, const TSK_TCHAR *outputFileName) { #ifndef TSK_WIN32 return TSK_ERR; #else @@ -620,6 +620,13 @@ TSK_RETVAL_ENUM tsk_img_writer_create(TSK_IMG_INFO * img_info, const TSK_TCHAR * return TSK_ERR; } + if (img_info->itype != TSK_IMG_TYPE_RAW) { + tsk_error_reset(); + tsk_error_set_errno(TSK_ERR_IMG_OPEN); + tsk_error_set_errstr("tsk_img_writer_create: image writer can be used on only raw images"); + return TSK_ERR; + } + IMG_RAW_INFO* raw_info = (IMG_RAW_INFO *)img_info; /* This should not be run on split images*/ @@ -734,4 +741,25 @@ TSK_RETVAL_ENUM tsk_img_writer_create(TSK_IMG_INFO * img_info, const TSK_TCHAR * #endif } +/** + * Read the remaining sectors into the VHD file. + */ +TSK_RETVAL_ENUM tsk_img_writer_finish(TSK_IMG_INFO *img_info) { + if (img_info->itype != TSK_IMG_TYPE_RAW) { + tsk_error_reset(); + tsk_error_set_errno(TSK_ERR_IMG_ARG); + tsk_error_set_errstr("tsk_img_writer_finish: image writer can be used on only raw images"); + return TSK_ERR; + } + + IMG_RAW_INFO* raw_info = (IMG_RAW_INFO *)img_info; + if (raw_info->img_writer == NULL) { + tsk_error_reset(); + tsk_error_set_errno(TSK_ERR_IMG_ARG); + tsk_error_set_errstr("tsk_img_writer_finish: image writer not set"); + return TSK_ERR; + } + + return raw_info->img_writer->finish_image(raw_info->img_writer); +} diff --git a/tsk/img/img_writer.h b/tsk/img/img_writer.h index bb7df2699..68a890bb8 100644 --- a/tsk/img/img_writer.h +++ b/tsk/img/img_writer.h @@ -19,7 +19,8 @@ #ifdef __cplusplus extern "C" { #endif - TSK_RETVAL_ENUM tsk_img_writer_create(TSK_IMG_INFO* img_info, const TSK_TCHAR * outputFileName); + TSK_RETVAL_ENUM tsk_img_writer_create(TSK_IMG_INFO *img_info, const TSK_TCHAR * outputFileName); + TSK_RETVAL_ENUM tsk_img_writer_finish(TSK_IMG_INFO *img_info); enum IMG_WRITER_BLOCK_STATUS_ENUM { IMG_WRITER_BLOCK_STATUS_UNALLOC = 0, -- GitLab