Skip to content

Commit 060d71f

Browse files
committed
fix argConverter racing issue when converting java strings to c++ strings
1 parent 6442d6f commit 060d71f

2 files changed

Lines changed: 3 additions & 38 deletions

File tree

runtime/src/main/jni/ArgConverter.cpp

Lines changed: 3 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -184,18 +184,10 @@ std::string ArgConverter::jstringToString(jstring value)
184184
return string();
185185
}
186186

187-
jsize utfLength;
188-
bool readInBuffer = ReadJStringInBuffer(value, utfLength);
189-
if (readInBuffer)
190-
{
191-
string s(charBuffer, utfLength);
192-
return s;
193-
}
194-
195187
JEnv env;
196188

197-
jboolean f = false;
198-
const char* chars = env.GetStringUTFChars(value, &f);
189+
jboolean f = JNI_FALSE;
190+
auto chars = env.GetStringUTFChars(value, &f);
199191
string s(chars);
200192
env.ReleaseStringUTFChars(value, chars);
201193

@@ -218,27 +210,6 @@ Local<Value> ArgConverter::jstringToV8String(Isolate *isolate, jstring value)
218210
return v8String;
219211
}
220212

221-
bool ArgConverter::ReadJStringInBuffer(jstring value, jsize& utfLength)
222-
{
223-
if (value == nullptr)
224-
{
225-
return false;
226-
}
227-
228-
JEnv env;
229-
utfLength = env.GetStringUTFLength(value);
230-
if (utfLength > BUFFER_SIZE)
231-
{
232-
return false;
233-
}
234-
235-
jsize strLength = env.GetStringLength(value);
236-
// use existing buffer to prevent extensive memory allocation
237-
env.GetStringUTFRegion(value, (jsize) 0, strLength, charBuffer);
238-
239-
return true;
240-
}
241-
242213
Local<String> ArgConverter::jcharToV8String(Isolate *isolate, jchar value)
243214
{
244215
auto v8String = ConvertToV8String(isolate, &value, 1);
@@ -340,5 +311,4 @@ Local<String> ArgConverter::ConvertToV8String(Isolate *isolate, const char *data
340311
}
341312

342313

343-
std::map<Isolate*, ArgConverter::TypeLongOperationsCache *> ArgConverter::s_type_long_operations_cache;
344-
char* ArgConverter::charBuffer = new char[ArgConverter::BUFFER_SIZE];
314+
std::map<Isolate*, ArgConverter::TypeLongOperationsCache *> ArgConverter::s_type_long_operations_cache;

runtime/src/main/jni/ArgConverter.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,6 @@ namespace tns
5555

5656
static TypeLongOperationsCache *GetTypeLongCache(v8::Isolate *isolate);
5757

58-
static bool ReadJStringInBuffer(jstring value, jsize& utfLength);
59-
6058
static jstring ObjectToString(jobject object);
6159

6260
static v8::Local<v8::String> jcharToV8String(v8::Isolate *isolate, jchar value);
@@ -67,9 +65,6 @@ namespace tns
6765

6866
static void NativeScriptLongToStringFunctionCallback(const v8::FunctionCallbackInfo<v8::Value>& args);
6967

70-
static char *charBuffer;
71-
static const int BUFFER_SIZE = 1024 * 64; // 64KB size. TODO: Do we need a larger/smaller buffer?
72-
7368
/*
7469
* "s_type_long_operations_cache" used to keep function
7570
* dealing with operations concerning java long -> javascript number.

0 commit comments

Comments
 (0)