diff --git a/bindings/java/jni/auto_db_java.cpp b/bindings/java/jni/auto_db_java.cpp index 8b8fa9d2346b9b3fbb6043efc7d29ab79404b2bf..3e494a345c1b3615098029a64d61ac6b2aa709c0 100644 --- a/bindings/java/jni/auto_db_java.cpp +++ b/bindings/java/jni/auto_db_java.cpp @@ -468,14 +468,14 @@ void extractExtension(char *name, char *extension) { * method does not handle 4 byte UTF8 encoding. * * @param input The sequence of characters to be turned into a jstring. -* @param input_len The number of chars in the input. * @param newJString The new jstring object created from the input. * @returns TSK_ERR on error, TSK_OK on success */ -TSK_RETVAL_ENUM TskAutoDbJava::createJString(const char * input, size_t input_len, jstring & newJString) { +TSK_RETVAL_ENUM TskAutoDbJava::createJString(const char * input, jstring & newJString) { + size_t input_len = strlen(input) + 1; UTF16 * utf16_input; - if ((utf16_input = (UTF16 *)tsk_malloc(input_len * sizeof(wchar_t))) == NULL) { + if ((utf16_input = (UTF16 *)tsk_malloc(input_len * sizeof(UTF16))) == NULL) { return TSK_ERR; } @@ -487,7 +487,13 @@ TSK_RETVAL_ENUM TskAutoDbJava::createJString(const char * input, size_t input_le return TSK_ERR; } - newJString = m_jniEnv->NewString(utf16_input, wcslen((const wchar_t *)utf16_input)); + /* + * To determine the length of the new string we we subtract the address + * of the start of the UTF16 buffer from the address at the end of the + * UTF16 buffer (target is advanced in the call to the conversion routine + * above). + */ + newJString = m_jniEnv->NewString(utf16_input, (target - utf16_input) - 1); free(utf16_input); return TSK_OK; @@ -582,7 +588,7 @@ TskAutoDbJava::addFile(TSK_FS_FILE* fs_file, } jstring namej; - if (createJString(name, nlen, namej) != TSK_OK) { + if (createJString(name, namej) != TSK_OK) { free(name); return TSK_ERR; } @@ -599,7 +605,7 @@ TskAutoDbJava::addFile(TSK_FS_FILE* fs_file, strncat(escaped_path, path, path_len - strlen(escaped_path)); jstring pathj; - if (createJString(escaped_path, path_len, pathj) != TSK_OK) { + if (createJString(escaped_path, pathj) != TSK_OK) { free(name); free(escaped_path); return TSK_ERR; @@ -609,7 +615,7 @@ TskAutoDbJava::addFile(TSK_FS_FILE* fs_file, free(escaped_path); jstring extj; - if (createJString(extension, 24, extj) != TSK_OK) { + if (createJString(extension, extj) != TSK_OK) { free(name); return TSK_ERR; } @@ -663,12 +669,12 @@ TskAutoDbJava::addFile(TSK_FS_FILE* fs_file, strncat(extension, "-slack", 6); } jstring slackNamej; - if (createJString(name, nlen, slackNamej) != TSK_OK) { + if (createJString(name, slackNamej) != TSK_OK) { free(name); return TSK_ERR; } jstring slackExtj; - if (createJString(extension, 24, slackExtj) != TSK_OK) { + if (createJString(extension, slackExtj) != TSK_OK) { free(name); return TSK_ERR; } diff --git a/bindings/java/jni/auto_db_java.h b/bindings/java/jni/auto_db_java.h index c3e8d6c1f67b753b2dae2eb40b90240db70a455d..3609d6a38c274f9829d13f403c21921387d9a92e 100644 --- a/bindings/java/jni/auto_db_java.h +++ b/bindings/java/jni/auto_db_java.h @@ -167,7 +167,7 @@ class TskAutoDbJava :public TskAuto { void saveObjectInfo(uint64_t objId, uint64_t parObjId, TSK_DB_OBJECT_TYPE_ENUM type); TSK_RETVAL_ENUM getObjectInfo(uint64_t objId, TSK_DB_OBJECT** obj_info); - TSK_RETVAL_ENUM createJString(const char * inputString, size_t input_len, jstring & newJString); + TSK_RETVAL_ENUM createJString(const char * inputString, jstring & newJString); // prevent copying until we add proper logic to handle it TskAutoDbJava(const TskAutoDbJava&);