Beispiel #1
0
        public void TestVisioDrawing_bug46199()
        {
            /**
             * taken from ftPictFmla sub-record in attachment 22860 (stream offset 0x768F).<br/>
             * Note that the since the string length is zero, there is no unicode flag byte
             */
            byte[] data46199 = hr(
                "0E 00 "
                + "05 00 "
                + "28 25 A3 01 "
                + "02 6C D1 34 02 "
                + "03 00 00 "
                + "0F CB E8 00");
            RecordInputStream in1 = TestcaseRecordInputStream.Create(EORSR_SID, data46199);

            EmbeddedObjectRefSubRecord rec;

            try
            {
                rec = new EmbeddedObjectRefSubRecord(in1, data46199.Length);
            }
            catch (RecordFormatException e)
            {
                if (e.Message.Equals("Not enough data (3) to read requested (4) bytes"))
                {
                    throw new AssertionException("Identified bug 22860");
                }
                throw e;
            }
            byte[] ser2 = rec.Serialize();
            TestcaseRecordInputStream.ConfirmRecordEncoding(EORSR_SID, data46199, ser2);
        }
Beispiel #2
0
        private static void ConfirmRead(byte[] data, int i)
        {
            RecordInputStream in1 = TestcaseRecordInputStream.Create(EORSR_SID, data);

            EmbeddedObjectRefSubRecord rec = new EmbeddedObjectRefSubRecord(in1, data.Length);

            byte[] ser2 = rec.Serialize();
            TestcaseRecordInputStream.ConfirmRecordEncoding("Test record " + i, EORSR_SID, data, ser2);
        }
Beispiel #3
0
        /**
         * Does this ObjectData have an associated POIFS
         *  Directory Entry?
         * (Not all do, those that don't have a data portion)
         */
        public bool HasDirectoryEntry()
        {
            EmbeddedObjectRefSubRecord subRecord = FindObjectRecord();

            // 'stream id' field tells you
            int?streamId = subRecord.StreamId;

            return(streamId != null && streamId != 0);
        }
Beispiel #4
0
        public void TestCameraTool_bug45912()
        {
            /**
             * taken from ftPictFmla sub-record in attachment 22645 (offset 0x40AB).
             */
            byte[] data45912 = hr(
                "12 00 0B 00 F8 02 88 04 3B 00 " +
                "00 00 00 01 00 00 00 01 " +
                "00 00");
            RecordInputStream in1 = TestcaseRecordInputStream.Create(EORSR_SID, data45912);

            EmbeddedObjectRefSubRecord rec = new EmbeddedObjectRefSubRecord(in1, data45912.Length);

            byte[] ser2 = rec.Serialize();
            ConfirmData(data45912, ser2);
        }
Beispiel #5
0
        public void TestCreate()
        {
            EmbeddedObjectRefSubRecord record1 = new EmbeddedObjectRefSubRecord();

            byte[]            ser = record1.Serialize();
            RecordInputStream in2 = new RecordInputStream(new MemoryStream(ser));

            in2.NextRecord();
            EmbeddedObjectRefSubRecord record2 = new EmbeddedObjectRefSubRecord(in2, ser.Length - 4);

            Assert.AreEqual(record1.OLEClassName, record2.OLEClassName);
            Assert.AreEqual(record1.StreamId, record2.StreamId);

            byte[] ser2 = record1.Serialize();
            Assert.IsTrue(Arrays.Equals(ser, ser2));
        }
Beispiel #6
0
        /**
         * Gets the object data. Only call for ones that have
         *  data though. See {@link #hasDirectoryEntry()}
         *
         * @return the object data as an OLE2 directory.
         * @ if there was an error Reading the data.
         */
        public DirectoryEntry GetDirectory()
        {
            EmbeddedObjectRefSubRecord subRecord = FindObjectRecord();

            int?   streamId   = ((EmbeddedObjectRefSubRecord)subRecord).StreamId;
            String streamName = "MBD" + HexDump.ToHex((int)streamId);

            Entry entry = _root.GetEntry(streamName);

            if (entry is DirectoryEntry)
            {
                return((DirectoryEntry)entry);
            }
            else
            {
                throw new IOException("Stream " + streamName + " was not an OLE2 directory");
            }
        }
Beispiel #7
0
        public static Record CreateSubRecord(RecordInputStream in1)
        {
            Record r = null;

            /* This must surely be an earlier hack?? Delete when confident
            short adjustedSize = size;
            if ( size < 0 )
            {
                adjustedSize = 0;
            }
            else if ( offset + size > data.Length )
            {
                adjustedSize = (short) ( data.Length - offset );
                if ( adjustedSize > 4 )
                {
                    adjustedSize -= 4;
                }
            }
    */
            switch (in1.Sid)
            {
                case CommonObjectDataSubRecord.sid:
                    r = new CommonObjectDataSubRecord(in1);
                    break;
                case EmbeddedObjectRefSubRecord.sid:
                    r = new EmbeddedObjectRefSubRecord(in1);
                    break;
                case GroupMarkerSubRecord.sid:
                    r = new GroupMarkerSubRecord(in1);
                    break;
                case EndSubRecord.sid:
                    r = new EndSubRecord(in1);
                    break;
                case NoteStructureSubRecord.sid:
                    r = new NoteStructureSubRecord(in1);
                    break;
                default:
                    r = new UnknownRecord(in1);
                    break;
            }
            return r;
        }
Beispiel #8
0
        public void TestStore()
        {
            byte[] src = HexRead.ReadFromString(data1);

            RecordInputStream in1 = TestcaseRecordInputStream.Create(EmbeddedObjectRefSubRecord.sid, src);


            EmbeddedObjectRefSubRecord record1 = new EmbeddedObjectRefSubRecord(in1, src.Length);

            byte[] ser = record1.Serialize();

            RecordInputStream          in2     = TestcaseRecordInputStream.Create(ser);
            EmbeddedObjectRefSubRecord record2 = new EmbeddedObjectRefSubRecord(in2, src.Length - 4);

            ConfirmData(src, ser);
            Assert.AreEqual(record1.OLEClassName, record2.OLEClassName);

            byte[] ser2 = record1.Serialize();

            Assert.IsTrue(Arrays.Equals(ser, ser2));
        }
Beispiel #9
0
        /**
         * Adds a new OLE Package Shape
         *
         * @param anchor       the client anchor describes how this picture is
         *                     attached to the sheet.
         * @param storageId    the storageId returned by {@Link HSSFWorkbook.AddOlePackage}
         * @param pictureIndex the index of the picture (used as preview image) in the
         *                     workbook collection of pictures.
         *
         * @return newly Created shape
         */
        public HSSFObjectData CreateObjectData(HSSFClientAnchor anchor, int storageId, int pictureIndex)
        {
            ObjRecord obj = new ObjRecord();

            CommonObjectDataSubRecord ftCmo = new CommonObjectDataSubRecord();

            ftCmo.ObjectType = (/*setter*/ CommonObjectType.Picture);
            // ftCmo.ObjectId=(/*setter*/oleShape.ShapeId); ... will be Set by onCreate(...)
            ftCmo.IsLocked    = (/*setter*/ true);
            ftCmo.IsPrintable = (/*setter*/ true);
            ftCmo.IsAutoFill  = (/*setter*/ true);
            ftCmo.IsAutoline  = (/*setter*/ true);
            ftCmo.Reserved1   = (/*setter*/ 0);
            ftCmo.Reserved2   = (/*setter*/ 0);
            ftCmo.Reserved3   = (/*setter*/ 0);
            obj.AddSubRecord(ftCmo);

            // FtCf (pictFormat)
            FtCfSubRecord   ftCf     = new FtCfSubRecord();
            HSSFPictureData pictData = Sheet.Workbook.GetAllPictures()[(pictureIndex - 1)] as HSSFPictureData;

            switch ((PictureType)pictData.Format)
            {
            case PictureType.WMF:
            case PictureType.EMF:
                // this needs patch #49658 to be applied to actually work
                ftCf.Flags = (/*setter*/ FtCfSubRecord.METAFILE_BIT);
                break;

            case PictureType.DIB:
            case PictureType.PNG:
            case PictureType.JPEG:
            case PictureType.PICT:
                ftCf.Flags = (/*setter*/ FtCfSubRecord.BITMAP_BIT);
                break;
            }
            obj.AddSubRecord(ftCf);
            // FtPioGrbit (pictFlags)
            FtPioGrbitSubRecord ftPioGrbit = new FtPioGrbitSubRecord();

            ftPioGrbit.SetFlagByBit(FtPioGrbitSubRecord.AUTO_PICT_BIT, true);
            obj.AddSubRecord(ftPioGrbit);

            EmbeddedObjectRefSubRecord ftPictFmla = new EmbeddedObjectRefSubRecord();

            ftPictFmla.SetUnknownFormulaData(new byte[] { 2, 0, 0, 0, 0 });
            ftPictFmla.OLEClassName = (/*setter*/ "Paket");
            ftPictFmla.SetStorageId(storageId);

            obj.AddSubRecord(ftPictFmla);
            obj.AddSubRecord(new EndSubRecord());

            String         entryName = "MBD" + HexDump.ToHex(storageId);
            DirectoryEntry oleRoot;

            try
            {
                DirectoryNode dn = (_sheet.Workbook as HSSFWorkbook).RootDirectory;
                if (dn == null)
                {
                    throw new FileNotFoundException();
                }
                oleRoot = (DirectoryEntry)dn.GetEntry(entryName);
            }
            catch (FileNotFoundException e)
            {
                throw new InvalidOperationException("trying to add ole shape without actually Adding data first - use HSSFWorkbook.AddOlePackage first", e);
            }

            // create picture shape, which need to be minimal modified for oleshapes
            HSSFPicture shape = new HSSFPicture(null, anchor);

            shape.PictureIndex = (/*setter*/ pictureIndex);
            EscherContainerRecord spContainer = shape.GetEscherContainer();
            EscherSpRecord        spRecord    = spContainer.GetChildById(EscherSpRecord.RECORD_ID) as EscherSpRecord;

            spRecord.Flags = (/*setter*/ spRecord.Flags | EscherSpRecord.FLAG_OLESHAPE);

            HSSFObjectData oleShape = new HSSFObjectData(spContainer, obj, oleRoot);

            AddShape(oleShape);
            OnCreate(oleShape);


            return(oleShape);
        }