SF 3377279
- Placed JacobVersion.properties into ${release.dir.java.meta.inf} instead of the current folder;
- com/jacob/test/safearray/SafeArrayBasicTest.java is compiled separately, because it is in UTF-16 encoding
- Added initializing Variant used to retrieve the next value from IEnum because some implemenations call VariantClear on it before setting a new value
- Changed _WIN32_WINNT to 0x0500 to fix build with VS2010
- Fixed the leak in Java_com_jacob_com_Variant_putVariantNoParam
- Added Dispatch.Method to the invoke flags to call _NewEnum. There are some nonconforming legacy implementations that expose _NewEnum as a method.
This commit is contained in:
22
build.xml
22
build.xml
@@ -111,9 +111,10 @@
|
|||||||
|
|
||||||
<!-- ======================================================================
|
<!-- ======================================================================
|
||||||
Writes out a version file to be included in the jar
|
Writes out a version file to be included in the jar
|
||||||
|
build iteration is only the iteration since lat time releases directory cleaned
|
||||||
================================================================== -->
|
================================================================== -->
|
||||||
<property name="version" value="version not set in compilation_tools properties file"/>
|
<property name="version" value="version not set in compilation_tools properties file"/>
|
||||||
<propertyfile file="${generated.filename.version}">
|
<propertyfile file="${release.dir.java.meta.inf}/${generated.filename.version}">
|
||||||
<entry key="version" type="string" value="${version}" />
|
<entry key="version" type="string" value="${version}" />
|
||||||
<entry key="build.iteration" type="int" operation="+" value="1" pattern="00" />
|
<entry key="build.iteration" type="int" operation="+" value="1" pattern="00" />
|
||||||
<entry key="build.date" type="date" value="now" operation="=" pattern="dd-MMMM-yyyy HH:mm:ss" />
|
<entry key="build.date" type="date" value="now" operation="=" pattern="dd-MMMM-yyyy HH:mm:ss" />
|
||||||
@@ -222,8 +223,14 @@
|
|||||||
<javac srcdir="${src.java.unittest}"
|
<javac srcdir="${src.java.unittest}"
|
||||||
destdir="${release.dir.java}"
|
destdir="${release.dir.java}"
|
||||||
classpath="${release.dir.java}:${junit.jar}"
|
classpath="${release.dir.java}:${junit.jar}"
|
||||||
listfiles="true" debug="on" source="1.5" />
|
listfiles="true" debug="on" source="1.5"
|
||||||
<copy file="${generated.filename.version}" todir="${release.dir.java.meta.inf}"/>
|
excludes="com/jacob/test/safearray/SafeArrayBasicTest.java"/>
|
||||||
|
<javac srcdir="${src.java.unittest}"
|
||||||
|
destdir="${release.dir.java}"
|
||||||
|
classpath="${release.dir.java}:${junit.jar}"
|
||||||
|
listfiles="true" debug="on" source="1.5"
|
||||||
|
includes="com/jacob/test/safearray/SafeArrayBasicTest.java"
|
||||||
|
encoding="UTF-16"/>
|
||||||
</target>
|
</target>
|
||||||
<!-- ======================================================================
|
<!-- ======================================================================
|
||||||
Package the classes into a JAR.
|
Package the classes into a JAR.
|
||||||
@@ -422,7 +429,7 @@
|
|||||||
<exclude name="**/CVS" />
|
<exclude name="**/CVS" />
|
||||||
<exclude name="**/*.obj" />
|
<exclude name="**/*.obj" />
|
||||||
<exclude name="**/*.class" />
|
<exclude name="**/*.class" />
|
||||||
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="LICENSE.* ${generated.filename.version} README.txt" />
|
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="LICENSE.* README.txt" />
|
||||||
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="docs/**" />
|
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="docs/**" />
|
||||||
<zipfileset dir="${release.dir.x86}" prefix="${generated.filename.zip}" includes="${generated.filename.dll.x86}" />
|
<zipfileset dir="${release.dir.x86}" prefix="${generated.filename.zip}" includes="${generated.filename.dll.x86}" />
|
||||||
<zipfileset dir="${release.dir.x64}" prefix="${generated.filename.zip}" includes="${generated.filename.dll.x64}" />
|
<zipfileset dir="${release.dir.x64}" prefix="${generated.filename.zip}" includes="${generated.filename.dll.x64}" />
|
||||||
@@ -437,15 +444,14 @@
|
|||||||
<exclude name="**/*.dll" />
|
<exclude name="**/*.dll" />
|
||||||
<exclude name="**/*.exp" />
|
<exclude name="**/*.exp" />
|
||||||
<exclude name="**/*.jar" />
|
<exclude name="**/*.jar" />
|
||||||
|
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="build.xml LICENSE.* README.txt" />
|
||||||
|
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="docs/**" />
|
||||||
|
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="lib/**" />
|
||||||
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="src/**" />
|
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="src/**" />
|
||||||
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="docs/**" />
|
|
||||||
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="jni/**" />
|
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="jni/**" />
|
||||||
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="samples/**" />
|
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="samples/**" />
|
||||||
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="unittest/**" />
|
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="unittest/**" />
|
||||||
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="vstudio/jacob.vcproj" />
|
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="vstudio/jacob.vcproj" />
|
||||||
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="lib/**" />
|
|
||||||
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="build.xml, README.txt" />
|
|
||||||
<zipfileset dir="${basedir}" prefix="${generated.filename.zip}" includes="LICENSE.* ${generated.filename.version}" />
|
|
||||||
</zip>
|
</zip>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,67 @@
|
|||||||
<HTML>
|
<HTML>
|
||||||
<BODY>
|
<BODY>
|
||||||
|
|
||||||
<!-- --------- -->
|
<!-- --------- -->
|
||||||
|
|
||||||
|
<h2>JACOB 1.16</h2>
|
||||||
|
<h3>What's New</h3>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
No new features
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<h3>Tracked Changes</h3>
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" >
|
||||||
|
<tr>
|
||||||
|
<td colspan="2"><b>Bugs</b></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="13%" valign="top"> </td>
|
||||||
|
<td width="87%" valign="top"> </td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2"><b>Patches</b></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="13%" valign="top">3377279</td>
|
||||||
|
<td width="87%" valign="top">(M1)Fix possible exception. Added initializing Variant used to retrieve
|
||||||
|
the next value from IEnum
|
||||||
|
because some implementations call VariantClear on it before setting a new value</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="13%" valign="top"> </td>
|
||||||
|
<td width="87%" valign="top">(M1)Isolate compilation of SafeArrayTest.java because it is UTF-16 and not UTF-8</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="13%" valign="top"> </td>
|
||||||
|
<td width="87%" valign="top">(M1)Changed windows version _WIN32_WINNT to 0x0500 to fix build with VS2010. (now 2000 or later)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="13%" valign="top"> </td>
|
||||||
|
<td width="87%" valign="top">(M1)Fixed the leak in Java_com_jacob_com_Variant_putVariantNoParam</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="13%" valign="top"> </td>
|
||||||
|
<td width="87%" valign="top">(M1)Added Dispatch.Method to the invoke flags to call _NewEnum.
|
||||||
|
There are some non-conforming legacy implementations that expose _NewEnum as a method.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="13%" valign="top"> </td>
|
||||||
|
<td width="87%" valign="top"> </td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2"><b>Feature Requests</b></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<tr>
|
||||||
|
<td width="13%" valign="top"></td>
|
||||||
|
<td width="87%" valign="top"></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<!-- --------- -->
|
||||||
|
|
||||||
<h2>JACOB 1.15</h2>
|
<h2>JACOB 1.15</h2>
|
||||||
<h3>What's New</h3>
|
<h3>What's New</h3>
|
||||||
<ul>
|
<ul>
|
||||||
@@ -18,30 +79,30 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="13%" valign="top">3065265</td>
|
<td width="13%" valign="top">3065265</td>
|
||||||
<td width="87%" valign="top">Bit masking in Variant.getXXXRef() uses wrong mask allowing more than
|
<td width="87%" valign="top">(M4)Bit masking in Variant.getXXXRef() uses wrong mask allowing more than
|
||||||
one type to be seen as the requested type. Code that passed in the correct type always worked
|
one type to be seen as the requested type. Code that passed in the correct type always worked
|
||||||
but invalid types were not always detected.(M4)</td>
|
but invalid types were not always detected.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="13%" valign="top">2935662</td>
|
<td width="13%" valign="top">2935662</td>
|
||||||
<td width="87%" valign="top">Error handling code crashes because of uninitialized data in Dispatch.cpp
|
<td width="87%" valign="top">(M4)Error handling code crashes because of uninitialized data in Dispatch.cpp
|
||||||
Check for NULL fails. pfnDeferredFillIn pointer is not initialized, but it's not NULL.(M4)</td>
|
Check for NULL fails. pfnDeferredFillIn pointer is not initialized, but it's not NULL.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="13%" valign="top">2819445</td>
|
<td width="13%" valign="top">2819445</td>
|
||||||
<td width="87%" valign="top">SafeArray.fromLongArray fails when using VariantLongInt (M3)</td>
|
<td width="87%" valign="top">(M3)SafeArray.fromLongArray fails when using VariantLongInt</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="13%" valign="top">2847577</td>
|
<td width="13%" valign="top">2847577</td>
|
||||||
<td width="87%" valign="top">SafeArray#setString(*) incorrectly handles unicode strings (M3)</td>
|
<td width="87%" valign="top">(M3) SafeArray#setString(*) incorrectly handles unicode strings</td>
|
||||||
</tr>
|
</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">(M2)System.getProperties call caused security exception in applet.
|
||||||
<i>com.jacob.includeAllClassesInROT</i> now acts as master switch for class/ROT control.
|
<i>com.jacob.includeAllClassesInROT</i> now acts as master switch for class/ROT control.
|
||||||
This change also has the side benefit that the PutInROT property is not
|
This change also has the side benefit that the PutInROT property is not
|
||||||
checked on every object creation for users who run in the standard
|
checked on every object creation for users who run in the standard
|
||||||
<i>all classes in ROT</i> mode. (M2)</td>
|
<i>all classes in ROT</i> mode.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="13%" valign="top"> </td>
|
<td width="13%" valign="top"> </td>
|
||||||
@@ -52,11 +113,11 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="13%" valign="top">2762275 </td>
|
<td width="13%" valign="top">2762275 </td>
|
||||||
<td width="87%" valign="top">Support conversion of primitive arrays to Variant arrays. (M1)</td>
|
<td width="87%" valign="top">(M1)Support conversion of primitive arrays to Variant arrays.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="13%" valign="top">2171967 </td>
|
<td width="13%" valign="top">2171967 </td>
|
||||||
<td width="87%" valign="top">VariantUtils.populateVariant can cause VM crash with unrecognized type.(M1)</td>
|
<td width="87%" valign="top">(M1)VariantUtils.populateVariant can cause VM crash with unrecognized type.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="13%" valign="top"> </td>
|
<td width="13%" valign="top"> </td>
|
||||||
@@ -72,13 +133,13 @@
|
|||||||
file signing and file placement is required</td>
|
file signing and file placement is required</td>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="13%" valign="top">2963102</td>
|
<td width="13%" valign="top">2963102</td>
|
||||||
<td width="87%" valign="top">Convert API to use var args and remove the many overloaded Dispatch
|
<td width="87%" valign="top">(M4)Convert API to use var args and remove the many overloaded Dispatch
|
||||||
methods that each added one more parameter.(M4)</td>
|
methods that each added one more parameter.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="13%" valign="top">2927058</td>
|
<td width="13%" valign="top">2927058</td>
|
||||||
<td width="87%" valign="top">a hasExited() method that allows polling until a COM server is
|
<td width="87%" valign="top">(M4)a hasExited() method that allows polling until a COM server is
|
||||||
terminated and implemented this method in JACOB(M4)</td>
|
terminated and implemented this method in JACOB</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="13%" valign="top"> </td>
|
<td width="13%" valign="top"> </td>
|
||||||
|
|||||||
@@ -57,6 +57,14 @@ Java_com_jacob_com_EnumVariant_Next(JNIEnv* env, jobject _this, jobjectArray var
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
VARIANT* sink = (VARIANT*)CoTaskMemAlloc(count * sizeof(VARIANT));
|
VARIANT* sink = (VARIANT*)CoTaskMemAlloc(count * sizeof(VARIANT));
|
||||||
|
// SF 3377279
|
||||||
|
// Added initializing Variant used to retrieve the next value from IEnum
|
||||||
|
// because some implemenations call VariantClear on it before setting a new value
|
||||||
|
for (ULONG i = 0; i < count; ++i)
|
||||||
|
{
|
||||||
|
VariantInit(sink + i);
|
||||||
|
}
|
||||||
|
|
||||||
ULONG fetchCount = 0;
|
ULONG fetchCount = 0;
|
||||||
|
|
||||||
HRESULT hr = self->Next(count, sink, &fetchCount);
|
HRESULT hr = self->Next(count, sink, &fetchCount);
|
||||||
|
|||||||
@@ -31,8 +31,10 @@
|
|||||||
#ifndef STRICT
|
#ifndef STRICT
|
||||||
#define STRICT
|
#define STRICT
|
||||||
#endif
|
#endif
|
||||||
|
// SF 3377279 Changed _WIN32_WINNT to 0x0500 to fix build with VS2010
|
||||||
|
// 0x400 is NT or later 0x500 is windows 2000 or later. we could go higher
|
||||||
#ifndef _WIN32_WINNT
|
#ifndef _WIN32_WINNT
|
||||||
#define _WIN32_WINNT 0x0400
|
#define _WIN32_WINNT 0x0500
|
||||||
#endif
|
#endif
|
||||||
//#define _ATL_APARTMENT_THREADED
|
//#define _ATL_APARTMENT_THREADED
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|||||||
@@ -967,6 +967,8 @@ JNIEXPORT void JNICALL Java_com_jacob_com_Variant_putVariantNoParam
|
|||||||
{
|
{
|
||||||
VARIANT *v = extractVariant(env, _this);
|
VARIANT *v = extractVariant(env, _this);
|
||||||
if (v) {
|
if (v) {
|
||||||
|
// SF 3377279 clear variable to fix leak
|
||||||
|
VariantClear(v);
|
||||||
V_VT(v) = VT_ERROR;
|
V_VT(v) = VT_ERROR;
|
||||||
V_ERROR(v) = DISP_E_PARAMNOTFOUND;
|
V_ERROR(v) = DISP_E_PARAMNOTFOUND;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,12 +40,13 @@ public class EnumVariant extends JacobObject implements
|
|||||||
*/
|
*/
|
||||||
public EnumVariant(Dispatch disp) {
|
public EnumVariant(Dispatch disp) {
|
||||||
int[] hres = new int[1];
|
int[] hres = new int[1];
|
||||||
|
// SF 3377279
|
||||||
|
// Added Dispatch.Method to the invoke flags to call _NewEnum. There are some
|
||||||
|
// non-conforming legacy implementations that expose _NewEnum as a method.
|
||||||
Variant evv = Dispatch.invokev(disp, DispatchIdentifier.DISPID_NEWENUM,
|
Variant evv = Dispatch.invokev(disp, DispatchIdentifier.DISPID_NEWENUM,
|
||||||
Dispatch.Get, new Variant[0], hres);
|
Dispatch.Get | Dispatch.Method, new Variant[0], hres);
|
||||||
if (evv.getvt() != Variant.VariantObject)
|
if (evv.getvt() != Variant.VariantObject)
|
||||||
//
|
|
||||||
// The DISPID_NEWENUM did not result in a valid object
|
// The DISPID_NEWENUM did not result in a valid object
|
||||||
//
|
|
||||||
throw new ComFailException("Can't obtain EnumVARIANT");
|
throw new ComFailException("Can't obtain EnumVARIANT");
|
||||||
|
|
||||||
EnumVariant tmp = evv.toEnumVariant();
|
EnumVariant tmp = evv.toEnumVariant();
|
||||||
|
|||||||
@@ -126,7 +126,8 @@ class IETestThread extends Thread {
|
|||||||
Dispatch.put(ie, "Visible", new Variant(true));
|
Dispatch.put(ie, "Visible", new Variant(true));
|
||||||
Dispatch.put(ie, "AddressBar", new Variant(true));
|
Dispatch.put(ie, "AddressBar", new Variant(true));
|
||||||
System.out.println("IETestThread: " + Dispatch.get(ie, "Path"));
|
System.out.println("IETestThread: " + Dispatch.get(ie, "Path"));
|
||||||
Dispatch.put(ie, "StatusText", new Variant("My Status Text"));
|
// Some version of IE broke this. Not sure which one
|
||||||
|
// Dispatch.put(ie, "StatusText", new Variant("My Status Text"));
|
||||||
|
|
||||||
System.out.println("IETestThread: About to hookup event listener");
|
System.out.println("IETestThread: About to hookup event listener");
|
||||||
IEEvents ieE = new IEEvents();
|
IEEvents ieE = new IEEvents();
|
||||||
|
|||||||
Reference in New Issue
Block a user