@@ -100,9 +100,8 @@ void throwOutOfMemoryError(JNIEnv* env, const char* message) {
100100 }
101101}
102102
103- static inline void updateHolder (JNIEnv* env, jlongArray array, int offset, void * p) {
104- auto val = reinterpret_cast <jlong>(p);
105- env->SetLongArrayRegion (array, offset, 1 , &val);
103+ static inline void updateHolder (JNIEnv* env, jlongArray array, int offset, jlong value) {
104+ env->SetLongArrayRegion (array, offset, 1 , &value);
106105}
107106
108107static jbyteArray newByteArray (JNIEnv* env, const void * p, jsize size) {
@@ -133,24 +132,21 @@ static jint rawKey(
133132 return SQLITE_ERROR ;
134133 }
135134 try {
136- AutoJByteArray key (env, jkey, keyLength);
137- char sql[81 ];
138- std::memcpy (sql, " PRAGMA key=\" x'" , 14 );
139- const char hex_chars[] = " 0123456789abcdef" ;
140- for (int i = 0 ; i < keyLength; ++i) {
141- auto byte = static_cast <std::byte>(key[i]);
142- sql[14 + 2 *i] = hex_chars[std::to_integer<unsigned char >(byte >> 4 )];
143- sql[14 + 2 *i + 1 ] = hex_chars[std::to_integer<unsigned char >(byte & std::byte{0xF })];
144- }
145- sql[78 ] = ' \' ' ;
146- sql[79 ] = ' "' ;
147- sql[80 ] = ' \0 ' ;
148- auto result = sqlite3_exec (reinterpret_cast <sqlite3*>(jdb), sql, nullptr , nullptr , nullptr );
149- volatile char * p = sql;
150- for (size_t i = 0 ; i < sizeof (sql); ++i) {
151- p[i] = ' \0 ' ;
152- }
153- return result;
135+ AutoJByteArray key (env, jkey, keyLength);
136+ char sql[81 ];
137+ std::memcpy (sql, " PRAGMA key=\" x'" , 14 );
138+ const char hex_chars[] = " 0123456789abcdef" ;
139+ for (int i = 0 ; i < keyLength; ++i) {
140+ auto byte = static_cast <std::byte>(key[i]);
141+ sql[14 + 2 *i] = hex_chars[std::to_integer<unsigned char >(byte >> 4 )];
142+ sql[15 + 2 *i] = hex_chars[std::to_integer<unsigned char >(byte & std::byte{0xF })];
143+ }
144+ sql[78 ] = ' \' ' ;
145+ sql[79 ] = ' "' ;
146+ sql[80 ] = ' \0 ' ;
147+ auto result = sqlite3_exec (reinterpret_cast <sqlite3*>(jdb), sql, nullptr , nullptr , nullptr );
148+ selekt::secure_zero (reinterpret_cast <unsigned char *>(sql), sizeof (sql));
149+ return result;
154150 } catch (const JniOutOfMemoryError&) {
155151 return SQLITE_NOMEM ;
156152 }
@@ -356,7 +352,7 @@ Java_com_bloomberg_selekt_ExternalSQLite_blobOpen(
356352 env->ReleaseStringUTFChars (jtable, table);
357353 env->ReleaseStringUTFChars (jcolumn, column);
358354 if (result == SQLITE_OK ) {
359- updateHolder (env, jholder, 0 , blob);
355+ updateHolder (env, jholder, 0 , reinterpret_cast <jlong>( blob) );
360356 }
361357 return result;
362358}
@@ -970,7 +966,7 @@ Java_com_bloomberg_selekt_ExternalSQLite_openV2(
970966 }
971967 auto result = sqlite3_open_v2 (filename, &db, jflags, nullptr );
972968 env->ReleaseStringUTFChars (jfilename, filename);
973- updateHolder (env, dbHolder, 0 , db );
969+ updateHolder (env, dbHolder, 0 , reinterpret_cast <jlong>(db) );
974970 return result;
975971}
976972
@@ -992,7 +988,7 @@ Java_com_bloomberg_selekt_ExternalSQLite_prepareV2(
992988 auto result = sqlite3_prepare_v2 (reinterpret_cast <sqlite3*>(jdb), sql, jlength, &statement, nullptr );
993989 env->ReleaseStringUTFChars (jsql, sql);
994990 if (result == SQLITE_OK ) {
995- updateHolder (env, statementHolder, 0 , statement);
991+ updateHolder (env, statementHolder, 0 , reinterpret_cast <jlong>( statement) );
996992 }
997993 return result;
998994}
0 commit comments