https://issues.apache.org/bugzilla/show_bug.cgi?id=44939

           Summary: PowerPoint OLE Embedding / ActiveX / Adobe Flash
           Product: POI
           Version: 3.0-dev
          Platform: Macintosh
        OS/Version: Mac OS X 10.4
            Status: NEW
          Severity: normal
          Priority: P2
         Component: HSLF
        AssignedTo: [email protected]
        ReportedBy: [EMAIL PROTECTED]
                CC: [EMAIL PROTECTED]


Created an attachment (id=21925)
 --> (https://issues.apache.org/bugzilla/attachment.cgi?id=21925)
Contains test code 'pe.java' and several sample .PPT's containing a single
slide with an embedded Flash OCX control (which represent an ExOleObStg record)

I've been working with hslf reading/writing .PPT files with some success.
However, I want to change a property of an embedded Flash ActiveX control.
PowerPoint binary format stores this as a docfile stream inside the PowerPoint
file within a record of type ExOleObjStg (record type #4113). You can get at
the uncompressed stream, of course, by calling getData() on the specific record
object.

I can get at the data that represents the ActiveX Flash control just fine and
can see using a hex editor some various properties. However, when I try to
update any characters in-place and save the .PPT back out, it often will open
with an error (strangely, sometimes changing a single byte does not result in
an error).

Here is a sample of a stream that is storing the ActiveX data that that Flash
OCX apparently reads:

http://skitch.com/speby/k1s3/a

The above example shows a part of the data inside after calling getData() on an
ExOleObjStg which is the embedded Flash ActiveX (.OCX) data. The Movie
property, in the above example is set to lowercase 'a' for the curious. The
above example is from examining the 'oledump' file generated from the text code
that is attached when running it against 'a.ppt'.

I have gone through a few basic reverse-engineering trials whereby I save a
.PPT with a single Flash ActiveX control and only change the movie property.
One .PPT with a Flash Movieproperty 'a', one with Movie property 'b', and so on
for a few more.

The only differences in the output I see above between each of those successive
iterations is in the 4 bytes at offset 1008 (2A 55 00 00) and the 4 bytes right
after at offset 100C (B4 3A 00 00). That's all that changes. Given this and the
very small changes I was making in each, the values that were being saved out
at those two offsets are wildly different. My only conclusion, thus far, is
that those 8 bytes represent some kind of checksum, perhaps, but have no way to
practically verify that in any reasonable amount of time. What I don't know is
whether those are specific to the Flash OCX control itself or are they specific
to the ActiveX IStorage interface on Windows or something else entirely? You
can see the differences when running the test code against 'a.ppt' and grabbing
the 'oledump' and comparing it to when running \the test code against 'b.ppt'
and its 'oledump' output.

My guess is that ultimately this is fairly simple checksum of some sort but
without knowing which one, it is difficult to proceed.

The ultimate goal is to be able to modify the properties of the OCX control
with the POI library. See the following screenshot for the properties within
PowerPoint. The 'Movie' property is the one I am modifying specifically in this
report:

http://skitch.com/speby/khep/microsoft-windows-xp


-- 
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to