22#include <osl/thread.h>
39 , eCharSet(osl_getThreadTextEncoding())
59 eCharSet = osl_getThreadTextEncoding();
68 r.
WriteUInt16(
static_cast<sal_uInt16
>( nSignature ) )
88 bool bResult =
nPos + nLen +
sizeof(sal_uInt32) + nLen *
sizeof(
sal_Unicode) <= nNext;
112 sal_uInt64 nLast = r.
Tell() + nLen;
113 bool bBadVer =
false;
118 sal_uInt16 nTmpFlags;
119 sal_uInt16 nReserved1;
120 sal_uInt32 nReserved2;
121 sal_uInt32 nReserved3;
128 nDimBase =
static_cast<sal_uInt16
>(lDimBase);
134 while( ( nNext = r.
Tell() ) < nLast )
157 const size_t nMinStringSize = (
eCharSet == RTL_TEXTENCODING_UNICODE) ? 4 : 2;
158 const sal_uInt64 nMaxStrings = r.
remainingSize() / nMinStringSize;
161 SAL_WARN(
"basic",
"Parsing error: " << nMaxStrings <<
162 " max possible entries, but " <<
nCount <<
" claimed, truncating");
165 for( sal_uInt16 j = 0; j <
nCount; ++j)
207 const sal_uInt64 nMinStringSize = 4;
208 const sal_uInt64 nMaxStrings = r.
remainingSize() / nMinStringSize;
211 SAL_WARN(
"basic",
"Parsing error: " << nMaxStrings <<
212 " max possible entries, but " <<
nCount <<
" claimed, truncating");
235 std::unique_ptr<char[]> pByteStrings(
new char[nLen]);
240 OUString
aStr(pByteStrings.get() + nOff2, strlen(pByteStrings.get() + nOff2),
eCharSet);
250 const size_t nMinStringSize = (
eCharSet == RTL_TEXTENCODING_UNICODE) ? 4 : 2;
251 const sal_uInt64 nMinRecordSize = nMinStringSize +
sizeof(sal_Int16);
252 const sal_uInt64 nMaxRecords = r.
remainingSize() / nMinRecordSize;
255 SAL_WARN(
"basic",
"Parsing error: " << nMaxRecords <<
256 " max possible entries, but " <<
nCount <<
" claimed, truncating");
265 sal_uInt16 nTypeMembers;
269 if (nTypeMembers > nMaxTypeMembers)
271 SAL_WARN(
"basic",
"Parsing error: " << nMaxTypeMembers <<
272 " max possible entries, but " << nTypeMembers <<
" claimed, truncating");
273 nTypeMembers = nMaxTypeMembers;
279 for (sal_uInt16 j = 0; j < nTypeMembers; j++)
283 sal_Int16 aIntMemberType;
318 sal_Int16 isFixedSize;
320 if (isFixedSize == 1)
325 for (sal_Int32
d = 0;
d < nDims;
d++)
342 pTypeMembers->
Insert(pTypeElem, pTypeMembers->
Count());
428 std::unique_ptr<char[]> pByteStrings(
new char[
nStringSize ]);
433 memcpy( pByteStrings.get() + nOff,
aStr.getStr(), (
aStr.getLength() + 1) *
sizeof(
char ) );
437 pByteStrings.reset();
450 sal_uInt32 nTypes =
rTypes->Count();
451 assert(nTypes <= std::numeric_limits<sal_uInt16>::max());
456 for (sal_uInt32
i = 0;
i < nTypes;
i++)
464 sal_uInt32 nTypeMembers = pTypeMembers->
Count();
465 assert(nTypeMembers <= std::numeric_limits<sal_uInt16>::max());
467 r.
WriteInt16(sal::static_int_cast<sal_uInt16>(nTypeMembers));
469 for (sal_uInt32 j = 0; j < nTypeMembers; j++)
474 const OUString& aElemName = pTypeElem->
GetName();
481 r.
WriteUInt32(
static_cast< sal_uInt32
> (nElemFlags) );
507 sal_Int32 nDims = pArray->
GetDims();
510 for (sal_Int32
d = 1;
d <= nDims;
d++)
514 pArray->
GetDim(
d, lBound, uBound);
560 sal_Int32 len = r.getLength() + 1;
562 if( needed > 0xFFFFFF00 )
568 sal_uInt32 nNewLen = needed + 1024;
569 nNewLen &= 0xFFFFFC00;
570 std::unique_ptr<sal_Unicode[]>
p(
new sal_Unicode[nNewLen]);
573 nStringSize = sal::static_int_cast< sal_uInt16 >(nNewLen);
626 sal_uInt32 nLen = nNextOff - nOff - 1;
632 return OUString(
u'\0');
639 OUString aOUStr(pStr);
640 if (
eType !=
nullptr)
692 const sal_Int16 nMax = std::numeric_limits<sal_Int16>::max();
std::vector< sal_uInt8 > && GetBuffer()
static sal_uInt32 calcNewOffSet(sal_uInt8 const *pCode, sal_uInt16 nOffset)
static sal_uInt16 calcLegacyOffSet(sal_uInt8 const *pCode, sal_uInt32 nOffset)
bool Save(SvStream &, sal_uInt32)
OUString GetString(sal_uInt32 nId, SbxDataType *eType=nullptr) const
const SbxObject * FindType(const OUString &aTypeName) const
sal_uInt16 CalcLegacyOffset(sal_Int32 nOffset)
std::vector< sal_uInt32 > mvStringOffsets
void AddEnum(SbxObject *)
bool ExceedsImgVersion12Limits()
bool ExceedsLegacyLimits()
void ReleaseLegacyBuffer()
sal_uInt32 CalcNewOffset(sal_Int16 nOffset)
bool Load(SvStream &, sal_uInt32 &nVer)
rtl_TextEncoding eCharSet
std::unique_ptr< sal_Unicode[]> pStrings
std::vector< sal_uInt8 > aLegacyPCode
void AddCode(std::vector< sal_uInt8 > &&)
void AddString(const OUString &)
std::vector< sal_uInt8 > aCode
void AddType(SbxObject const *)
void Insert(SbxVariable *, sal_uInt32)
SbxVariable * Get(sal_uInt32)
void SetFlags(SbxFlagBits n)
SbxFlagBits GetFlags() const
void ResetFlag(SbxFlagBits n)
bool GetDim(sal_Int32, sal_Int32 &, sal_Int32 &) const
sal_Int32 GetDims() const
bool hasFixedSize() const
void setHasFixedSize(bool bHasFixedSize)
void unoAddDim(sal_Int32, sal_Int32)
SbxArray * GetProperties()
const OUString & GetClassName() const
void Remove(const OUString &, SbxClassType)
SbxBase * GetObject() const
bool PutObject(SbxBase *)
virtual SbxDataType GetType() const override
const OUString & GetName(SbxNameType=SbxNameType::NONE) const
SvStream & WriteInt32(sal_Int32 nInt32)
SvStream & WriteUniOrByteString(std::u16string_view rStr, rtl_TextEncoding eDestCharSet)
OUString ReadUniOrByteString(rtl_TextEncoding eSrcCharSet)
SvStream & ReadInt16(sal_Int16 &rInt16)
std::size_t WriteBytes(const void *pData, std::size_t nSize)
SvStream & WriteInt16(sal_Int16 nInt16)
SvStream & WriteUInt16(sal_uInt16 nUInt16)
SvStream & WriteUInt32(sal_uInt32 nUInt32)
SvStream & ReadUInt32(sal_uInt32 &rUInt32)
sal_uInt64 Seek(sal_uInt64 nPos)
SvStream & ReadInt32(sal_Int32 &rInt32)
std::size_t ReadBytes(void *pData, std::size_t nSize)
sal_uInt64 SeekRel(sal_Int64 nPos)
SvStream & ReadUInt16(sal_uInt16 &rUInt16)
sal_uInt64 remainingSize()
EmbeddedObjectRef * pObject
constexpr sal_uInt32 nUnicodeDataMagicNumber
static bool GetToUnicodePoolData(SvStream &r, sal_uInt64 nLen, sal_uInt64 nNext)
static sal_uInt64 SbiOpenRecord(SvStream &r, FileOffset nSignature, sal_uInt16 nElem)
static void SbiCloseRecord(SvStream &r, sal_uInt64 nOff)
#define SAL_WARN(area, stream)
constexpr std::enable_if_t< std::is_signed_v< T >, std::make_unsigned_t< T > > make_unsigned(T value)
OString OUStringToOString(std::u16string_view str, ConnectionSettings const *settings)
SbxObjectRef cloneTypeObjectImpl(const SbxObject &rTypeObj)
TOOLS_DLLPUBLIC OUString read_uInt16s_ToOUString(SvStream &rStrm, std::size_t nUnits)
TOOLS_DLLPUBLIC std::size_t write_uInt16s_FromOUString(SvStream &rStrm, std::u16string_view rStr, std::size_t nUnits)
TOOLS_DLLPUBLIC rtl_TextEncoding GetSOStoreTextEncoding(rtl_TextEncoding eEncoding)
TOOLS_DLLPUBLIC rtl_TextEncoding GetSOLoadTextEncoding(rtl_TextEncoding eEncoding)