2847577 SafeArray#setString(*) incorrectly handles unicode strings
This commit is contained in:
@@ -16,6 +16,10 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"><b>Bugs</b></td>
|
<td colspan="2"><b>Bugs</b></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="13%" valign="top">2847577</td>
|
||||||
|
<td width="87%" valign="top">SafeArray#setString(*) incorrectly handles unicode strings (M3)</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="13%" valign="top">2721937</td>
|
<td width="13%" valign="top">2721937</td>
|
||||||
<td width="87%" valign="top">System.getProperties call caused security exception in applet.
|
<td width="87%" valign="top">System.getProperties call caused security exception in applet.
|
||||||
|
|||||||
@@ -1867,18 +1867,20 @@ JNIEXPORT void JNICALL Java_com_jacob_com_SafeArray_setString__ILjava_lang_Strin
|
|||||||
if (vt == VT_VARIANT) {
|
if (vt == VT_VARIANT) {
|
||||||
VARIANT v;
|
VARIANT v;
|
||||||
VariantInit(&v);
|
VariantInit(&v);
|
||||||
const char *str = env->GetStringUTFChars(s, NULL);
|
// SF 2847577 support unicode move from GetStringUTFChars() to GetStringChars()
|
||||||
CComBSTR bs(str);
|
const jchar *str = env->GetStringChars(s, NULL);
|
||||||
|
CComBSTR bs((LPCOLESTR)str);
|
||||||
V_VT(&v) = VT_BSTR;
|
V_VT(&v) = VT_BSTR;
|
||||||
V_BSTR(&v) = bs.Copy();
|
V_BSTR(&v) = bs.Copy();
|
||||||
SafeArrayPutElement(sa,&idx,&v); \
|
SafeArrayPutElement(sa,&idx,&v); \
|
||||||
env->ReleaseStringUTFChars(s, str);
|
env->ReleaseStringChars(s, str);
|
||||||
VariantClear(&v);
|
VariantClear(&v);
|
||||||
} else if (vt == VT_BSTR) {
|
} else if (vt == VT_BSTR) {
|
||||||
const char *str = env->GetStringUTFChars(s, NULL);
|
// SF 2847577 support unicode move from GetStringUTFChars() to GetStringChars()
|
||||||
CComBSTR bs(str);
|
const jchar *str = env->GetStringChars(s, NULL);
|
||||||
|
CComBSTR bs((LPCOLESTR)str);
|
||||||
SafeArrayPutElement(sa,&idx,bs.Detach());
|
SafeArrayPutElement(sa,&idx,bs.Detach());
|
||||||
env->ReleaseStringUTFChars(s, str);
|
env->ReleaseStringChars(s, str);
|
||||||
} else {
|
} else {
|
||||||
ThrowComFail(env, "safearray cannot set string", 0);
|
ThrowComFail(env, "safearray cannot set string", 0);
|
||||||
}
|
}
|
||||||
@@ -1906,20 +1908,22 @@ JNIEXPORT void JNICALL Java_com_jacob_com_SafeArray_setString__IILjava_lang_Stri
|
|||||||
if (vt == VT_VARIANT) {
|
if (vt == VT_VARIANT) {
|
||||||
VARIANT v;
|
VARIANT v;
|
||||||
VariantInit(&v);
|
VariantInit(&v);
|
||||||
const char *str = env->GetStringUTFChars(s, NULL);
|
// SF 2847577 support unicode move from GetStringUTFChars() to GetStringChars()
|
||||||
CComBSTR bs(str);
|
const jchar *str = env->GetStringChars(s, NULL);
|
||||||
|
CComBSTR bs((LPCOLESTR)str);
|
||||||
V_VT(&v) = VT_BSTR;
|
V_VT(&v) = VT_BSTR;
|
||||||
V_BSTR(&v) = bs.Copy();
|
V_BSTR(&v) = bs.Copy();
|
||||||
long idx[2] = {i,j};
|
long idx[2] = {i,j};
|
||||||
SafeArrayPutElement(sa,idx,&v);
|
SafeArrayPutElement(sa,idx,&v);
|
||||||
env->ReleaseStringUTFChars(s, str);
|
env->ReleaseStringChars(s, str);
|
||||||
VariantClear(&v);
|
VariantClear(&v);
|
||||||
} else if (vt == VT_BSTR) {
|
} else if (vt == VT_BSTR) {
|
||||||
long idx[2] = {i,j};
|
long idx[2] = {i,j};
|
||||||
const char *str = env->GetStringUTFChars(s, NULL);
|
// SF 2847577 support unicode move from GetStringUTFChars() to GetStringChars()
|
||||||
CComBSTR bs(str);
|
const jchar *str = env->GetStringChars(s, NULL);
|
||||||
|
CComBSTR bs((LPCOLESTR)str);
|
||||||
SafeArrayPutElement(sa,idx,bs.Detach());
|
SafeArrayPutElement(sa,idx,bs.Detach());
|
||||||
env->ReleaseStringUTFChars(s, str);
|
env->ReleaseStringChars(s, str);
|
||||||
} else {
|
} else {
|
||||||
ThrowComFail(env, "safearray cannot set string", 0);
|
ThrowComFail(env, "safearray cannot set string", 0);
|
||||||
}
|
}
|
||||||
@@ -2000,24 +2004,26 @@ JNIEXPORT void JNICALL Java_com_jacob_com_SafeArray_setStrings
|
|||||||
for(int i=ja_start,j=idx;i<ja_start+nelem;i++,j++)
|
for(int i=ja_start,j=idx;i<ja_start+nelem;i++,j++)
|
||||||
{
|
{
|
||||||
jstring s = (jstring)env->GetObjectArrayElement(ja, i);
|
jstring s = (jstring)env->GetObjectArrayElement(ja, i);
|
||||||
const char *str = env->GetStringUTFChars(s, NULL);
|
// SF 2847577 support unicode move from GetStringUTFChars() to GetStringChars()
|
||||||
CComBSTR bs(str);
|
const jchar *str = env->GetStringChars(s, NULL);
|
||||||
|
CComBSTR bs((LPCOLESTR)str);
|
||||||
V_VT(&v) = VT_BSTR;
|
V_VT(&v) = VT_BSTR;
|
||||||
V_BSTR(&v) = bs.Copy();
|
V_BSTR(&v) = bs.Copy();
|
||||||
long x = j;
|
long x = j;
|
||||||
SafeArrayPutElement(psa,&x,&v);
|
SafeArrayPutElement(psa,&x,&v);
|
||||||
VariantClear(&v);
|
VariantClear(&v);
|
||||||
env->ReleaseStringUTFChars(s, str);
|
env->ReleaseStringChars(s, str);
|
||||||
}
|
}
|
||||||
} else if (vt == VT_BSTR) {
|
} else if (vt == VT_BSTR) {
|
||||||
for(int i=ja_start,j=idx;i<ja_start+nelem;i++,j++)
|
for(int i=ja_start,j=idx;i<ja_start+nelem;i++,j++)
|
||||||
{
|
{
|
||||||
jstring s = (jstring)env->GetObjectArrayElement(ja, i);
|
jstring s = (jstring)env->GetObjectArrayElement(ja, i);
|
||||||
const char *str = env->GetStringUTFChars(s, NULL);
|
// SF 2847577 support unicode move from GetStringUTFChars() to GetStringChars()
|
||||||
CComBSTR bs(str);
|
const jchar *str = env->GetStringChars(s, NULL);
|
||||||
|
CComBSTR bs((LPCOLESTR)str);
|
||||||
long x = j;
|
long x = j;
|
||||||
SafeArrayPutElement(psa,&x,bs.Detach());
|
SafeArrayPutElement(psa,&x,bs.Detach());
|
||||||
env->ReleaseStringUTFChars(s, str);
|
env->ReleaseStringChars(s, str);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ThrowComFail(env, "safearray cannot set strings", 0);
|
ThrowComFail(env, "safearray cannot set strings", 0);
|
||||||
@@ -3006,18 +3012,20 @@ JNIEXPORT void JNICALL Java_com_jacob_com_SafeArray_setString___3ILjava_lang_Str
|
|||||||
if (vt == VT_VARIANT) {
|
if (vt == VT_VARIANT) {
|
||||||
VARIANT v;
|
VARIANT v;
|
||||||
VariantInit(&v);
|
VariantInit(&v);
|
||||||
const char *str = env->GetStringUTFChars(s, NULL);
|
// SF 2847577 support unicode move from GetStringUTFChars() to GetStringChars()
|
||||||
CComBSTR bs(str);
|
const jchar *str = env->GetStringChars(s, NULL);
|
||||||
|
CComBSTR bs((LPCOLESTR)str);
|
||||||
V_VT(&v) = VT_BSTR;
|
V_VT(&v) = VT_BSTR;
|
||||||
V_BSTR(&v) = bs.Copy();
|
V_BSTR(&v) = bs.Copy();
|
||||||
SafeArrayPutElement(sa, jIndices,&v);
|
SafeArrayPutElement(sa, jIndices,&v);
|
||||||
env->ReleaseStringUTFChars(s, str);
|
env->ReleaseStringChars(s, str);
|
||||||
VariantClear(&v);
|
VariantClear(&v);
|
||||||
} else if (vt == VT_BSTR) {
|
} else if (vt == VT_BSTR) {
|
||||||
const char *str = env->GetStringUTFChars(s, NULL);
|
// SF 2847577 support unicode move from GetStringUTFChars() to GetStringChars()
|
||||||
CComBSTR bs(str);
|
const jchar *str = env->GetStringChars(s, NULL);
|
||||||
|
CComBSTR bs((LPCOLESTR)str);
|
||||||
SafeArrayPutElement(sa, jIndices,bs.Detach());
|
SafeArrayPutElement(sa, jIndices,bs.Detach());
|
||||||
env->ReleaseStringUTFChars(s, str);
|
env->ReleaseStringChars(s, str);
|
||||||
} else {
|
} else {
|
||||||
ThrowComFail(env, "safearray cannot set string", 0);
|
ThrowComFail(env, "safearray cannot set string", 0);
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user