diff --git a/mozilla/string/obsolete/nsStr.cpp b/mozilla/string/obsolete/nsStr.cpp index 087c73f389d..98d856c27ea 100644 --- a/mozilla/string/obsolete/nsStr.cpp +++ b/mozilla/string/obsolete/nsStr.cpp @@ -600,6 +600,7 @@ CBufDescriptor::CBufDescriptor(char* aString,PRBool aStackBased,PRUint32 aCapaci mBuffer=aString; mCharSize=eOneByte; mStackBased=aStackBased; + mIsConst=PR_FALSE; mLength=mCapacity=0; if(aString && aCapacity>1) { mCapacity=aCapacity-1; @@ -609,11 +610,27 @@ CBufDescriptor::CBufDescriptor(char* aString,PRBool aStackBased,PRUint32 aCapaci } } +CBufDescriptor::CBufDescriptor(const char* aString,PRBool aStackBased,PRUint32 aCapacity,PRInt32 aLength) { + mBuffer=(char*)aString; + mCharSize=eOneByte; + mStackBased=aStackBased; + mIsConst=PR_TRUE; + mLength=mCapacity=0; + if(aString && aCapacity>1) { + mCapacity=aCapacity-1; + mLength=(-1==aLength) ? strlen(aString) : aLength; + if(mLength>PRInt32(mCapacity)) + mLength=mCapacity; + } +} + + CBufDescriptor::CBufDescriptor(PRUnichar* aString,PRBool aStackBased,PRUint32 aCapacity,PRInt32 aLength) { mBuffer=(char*)aString; mCharSize=eTwoByte; mStackBased=aStackBased; mLength=mCapacity=0; + mIsConst=PR_FALSE; if(aString && aCapacity>1) { mCapacity=aCapacity-1; mLength=(-1==aLength) ? nsCRT::strlen(aString) : aLength; @@ -622,5 +639,18 @@ CBufDescriptor::CBufDescriptor(PRUnichar* aString,PRBool aStackBased,PRUint32 aC } } +CBufDescriptor::CBufDescriptor(const PRUnichar* aString,PRBool aStackBased,PRUint32 aCapacity,PRInt32 aLength) { + mBuffer=(char*)aString; + mCharSize=eTwoByte; + mStackBased=aStackBased; + mLength=mCapacity=0; + mIsConst=PR_TRUE; + if(aString && aCapacity>1) { + mCapacity=aCapacity-1; + mLength=(-1==aLength) ? nsCRT::strlen(aString) : aLength; + if(mLength>PRInt32(mCapacity)) + mLength=mCapacity; + } +} //---------------------------------------------------------------------------------------- diff --git a/mozilla/string/obsolete/nsStr.h b/mozilla/string/obsolete/nsStr.h index daf814e797e..5f194705a99 100644 --- a/mozilla/string/obsolete/nsStr.h +++ b/mozilla/string/obsolete/nsStr.h @@ -183,15 +183,17 @@ class nsIMemoryAgent; class NS_COM CBufDescriptor { public: - CBufDescriptor(char* aString, PRBool aStackBased,PRUint32 aCapacity,PRInt32 aLength=-1); - CBufDescriptor(PRUnichar* aString,PRBool aStackBased,PRUint32 aCapacity,PRInt32 aLength=-1); + CBufDescriptor(char* aString, PRBool aStackBased,PRUint32 aCapacity,PRInt32 aLength=-1); + CBufDescriptor(const char* aString, PRBool aStackBased,PRUint32 aCapacity,PRInt32 aLength=-1); + CBufDescriptor(PRUnichar* aString, PRBool aStackBased,PRUint32 aCapacity,PRInt32 aLength=-1); + CBufDescriptor(const PRUnichar* aString,PRBool aStackBased,PRUint32 aCapacity,PRInt32 aLength=-1); char* mBuffer; eCharSize mCharSize; PRUint32 mCapacity; PRInt32 mLength; PRBool mStackBased; - + PRBool mIsConst; }; //---------------------------------------------------------------------------------------- diff --git a/mozilla/string/obsolete/nsString.cpp b/mozilla/string/obsolete/nsString.cpp index b3a868dcca8..1b9109be5d6 100644 --- a/mozilla/string/obsolete/nsString.cpp +++ b/mozilla/string/obsolete/nsString.cpp @@ -1753,7 +1753,8 @@ nsCAutoString::nsCAutoString(const CBufDescriptor& aBuffer) : nsCString() { else { nsStr::Initialize(*this,aBuffer.mBuffer,aBuffer.mCapacity,aBuffer.mLength,aBuffer.mCharSize,!aBuffer.mStackBased); } - AddNullTerminator(*this); //this isn't really needed, but it guarantees that folks don't pass string constants. + if(!aBuffer.mIsConst) + AddNullTerminator(*this); //this isn't really needed, but it guarantees that folks don't pass string constants. } /** diff --git a/mozilla/string/obsolete/nsString2.cpp b/mozilla/string/obsolete/nsString2.cpp index 58efcd34710..2049c9d1b17 100644 --- a/mozilla/string/obsolete/nsString2.cpp +++ b/mozilla/string/obsolete/nsString2.cpp @@ -109,6 +109,7 @@ nsString::nsString(const nsString& aString) :mAgent(aString.mAgent) { * @param reference to a subsumeString */ nsString::nsString(nsSubsumeStr& aSubsumeStr) :mAgent(0) { + nsStr::Initialize(*this,eTwoByte); Subsume(*this,aSubsumeStr); } @@ -2149,7 +2150,8 @@ nsAutoString::nsAutoString(const CBufDescriptor& aBuffer) : nsString() { else { nsStr::Initialize(*this,aBuffer.mBuffer,aBuffer.mCapacity,aBuffer.mLength,aBuffer.mCharSize,!aBuffer.mStackBased); } - AddNullTerminator(*this); + if(!aBuffer.mIsConst) + AddNullTerminator(*this); } diff --git a/mozilla/xpcom/ds/nsStr.cpp b/mozilla/xpcom/ds/nsStr.cpp index 087c73f389d..98d856c27ea 100644 --- a/mozilla/xpcom/ds/nsStr.cpp +++ b/mozilla/xpcom/ds/nsStr.cpp @@ -600,6 +600,7 @@ CBufDescriptor::CBufDescriptor(char* aString,PRBool aStackBased,PRUint32 aCapaci mBuffer=aString; mCharSize=eOneByte; mStackBased=aStackBased; + mIsConst=PR_FALSE; mLength=mCapacity=0; if(aString && aCapacity>1) { mCapacity=aCapacity-1; @@ -609,11 +610,27 @@ CBufDescriptor::CBufDescriptor(char* aString,PRBool aStackBased,PRUint32 aCapaci } } +CBufDescriptor::CBufDescriptor(const char* aString,PRBool aStackBased,PRUint32 aCapacity,PRInt32 aLength) { + mBuffer=(char*)aString; + mCharSize=eOneByte; + mStackBased=aStackBased; + mIsConst=PR_TRUE; + mLength=mCapacity=0; + if(aString && aCapacity>1) { + mCapacity=aCapacity-1; + mLength=(-1==aLength) ? strlen(aString) : aLength; + if(mLength>PRInt32(mCapacity)) + mLength=mCapacity; + } +} + + CBufDescriptor::CBufDescriptor(PRUnichar* aString,PRBool aStackBased,PRUint32 aCapacity,PRInt32 aLength) { mBuffer=(char*)aString; mCharSize=eTwoByte; mStackBased=aStackBased; mLength=mCapacity=0; + mIsConst=PR_FALSE; if(aString && aCapacity>1) { mCapacity=aCapacity-1; mLength=(-1==aLength) ? nsCRT::strlen(aString) : aLength; @@ -622,5 +639,18 @@ CBufDescriptor::CBufDescriptor(PRUnichar* aString,PRBool aStackBased,PRUint32 aC } } +CBufDescriptor::CBufDescriptor(const PRUnichar* aString,PRBool aStackBased,PRUint32 aCapacity,PRInt32 aLength) { + mBuffer=(char*)aString; + mCharSize=eTwoByte; + mStackBased=aStackBased; + mLength=mCapacity=0; + mIsConst=PR_TRUE; + if(aString && aCapacity>1) { + mCapacity=aCapacity-1; + mLength=(-1==aLength) ? nsCRT::strlen(aString) : aLength; + if(mLength>PRInt32(mCapacity)) + mLength=mCapacity; + } +} //---------------------------------------------------------------------------------------- diff --git a/mozilla/xpcom/ds/nsStr.h b/mozilla/xpcom/ds/nsStr.h index daf814e797e..5f194705a99 100644 --- a/mozilla/xpcom/ds/nsStr.h +++ b/mozilla/xpcom/ds/nsStr.h @@ -183,15 +183,17 @@ class nsIMemoryAgent; class NS_COM CBufDescriptor { public: - CBufDescriptor(char* aString, PRBool aStackBased,PRUint32 aCapacity,PRInt32 aLength=-1); - CBufDescriptor(PRUnichar* aString,PRBool aStackBased,PRUint32 aCapacity,PRInt32 aLength=-1); + CBufDescriptor(char* aString, PRBool aStackBased,PRUint32 aCapacity,PRInt32 aLength=-1); + CBufDescriptor(const char* aString, PRBool aStackBased,PRUint32 aCapacity,PRInt32 aLength=-1); + CBufDescriptor(PRUnichar* aString, PRBool aStackBased,PRUint32 aCapacity,PRInt32 aLength=-1); + CBufDescriptor(const PRUnichar* aString,PRBool aStackBased,PRUint32 aCapacity,PRInt32 aLength=-1); char* mBuffer; eCharSize mCharSize; PRUint32 mCapacity; PRInt32 mLength; PRBool mStackBased; - + PRBool mIsConst; }; //---------------------------------------------------------------------------------------- diff --git a/mozilla/xpcom/ds/nsString.cpp b/mozilla/xpcom/ds/nsString.cpp index b3a868dcca8..1b9109be5d6 100644 --- a/mozilla/xpcom/ds/nsString.cpp +++ b/mozilla/xpcom/ds/nsString.cpp @@ -1753,7 +1753,8 @@ nsCAutoString::nsCAutoString(const CBufDescriptor& aBuffer) : nsCString() { else { nsStr::Initialize(*this,aBuffer.mBuffer,aBuffer.mCapacity,aBuffer.mLength,aBuffer.mCharSize,!aBuffer.mStackBased); } - AddNullTerminator(*this); //this isn't really needed, but it guarantees that folks don't pass string constants. + if(!aBuffer.mIsConst) + AddNullTerminator(*this); //this isn't really needed, but it guarantees that folks don't pass string constants. } /** diff --git a/mozilla/xpcom/ds/nsString2.cpp b/mozilla/xpcom/ds/nsString2.cpp index 58efcd34710..2049c9d1b17 100644 --- a/mozilla/xpcom/ds/nsString2.cpp +++ b/mozilla/xpcom/ds/nsString2.cpp @@ -109,6 +109,7 @@ nsString::nsString(const nsString& aString) :mAgent(aString.mAgent) { * @param reference to a subsumeString */ nsString::nsString(nsSubsumeStr& aSubsumeStr) :mAgent(0) { + nsStr::Initialize(*this,eTwoByte); Subsume(*this,aSubsumeStr); } @@ -2149,7 +2150,8 @@ nsAutoString::nsAutoString(const CBufDescriptor& aBuffer) : nsString() { else { nsStr::Initialize(*this,aBuffer.mBuffer,aBuffer.mCapacity,aBuffer.mLength,aBuffer.mCharSize,!aBuffer.mStackBased); } - AddNullTerminator(*this); + if(!aBuffer.mIsConst) + AddNullTerminator(*this); } diff --git a/mozilla/xpcom/string/obsolete/nsStr.cpp b/mozilla/xpcom/string/obsolete/nsStr.cpp index 087c73f389d..98d856c27ea 100644 --- a/mozilla/xpcom/string/obsolete/nsStr.cpp +++ b/mozilla/xpcom/string/obsolete/nsStr.cpp @@ -600,6 +600,7 @@ CBufDescriptor::CBufDescriptor(char* aString,PRBool aStackBased,PRUint32 aCapaci mBuffer=aString; mCharSize=eOneByte; mStackBased=aStackBased; + mIsConst=PR_FALSE; mLength=mCapacity=0; if(aString && aCapacity>1) { mCapacity=aCapacity-1; @@ -609,11 +610,27 @@ CBufDescriptor::CBufDescriptor(char* aString,PRBool aStackBased,PRUint32 aCapaci } } +CBufDescriptor::CBufDescriptor(const char* aString,PRBool aStackBased,PRUint32 aCapacity,PRInt32 aLength) { + mBuffer=(char*)aString; + mCharSize=eOneByte; + mStackBased=aStackBased; + mIsConst=PR_TRUE; + mLength=mCapacity=0; + if(aString && aCapacity>1) { + mCapacity=aCapacity-1; + mLength=(-1==aLength) ? strlen(aString) : aLength; + if(mLength>PRInt32(mCapacity)) + mLength=mCapacity; + } +} + + CBufDescriptor::CBufDescriptor(PRUnichar* aString,PRBool aStackBased,PRUint32 aCapacity,PRInt32 aLength) { mBuffer=(char*)aString; mCharSize=eTwoByte; mStackBased=aStackBased; mLength=mCapacity=0; + mIsConst=PR_FALSE; if(aString && aCapacity>1) { mCapacity=aCapacity-1; mLength=(-1==aLength) ? nsCRT::strlen(aString) : aLength; @@ -622,5 +639,18 @@ CBufDescriptor::CBufDescriptor(PRUnichar* aString,PRBool aStackBased,PRUint32 aC } } +CBufDescriptor::CBufDescriptor(const PRUnichar* aString,PRBool aStackBased,PRUint32 aCapacity,PRInt32 aLength) { + mBuffer=(char*)aString; + mCharSize=eTwoByte; + mStackBased=aStackBased; + mLength=mCapacity=0; + mIsConst=PR_TRUE; + if(aString && aCapacity>1) { + mCapacity=aCapacity-1; + mLength=(-1==aLength) ? nsCRT::strlen(aString) : aLength; + if(mLength>PRInt32(mCapacity)) + mLength=mCapacity; + } +} //---------------------------------------------------------------------------------------- diff --git a/mozilla/xpcom/string/obsolete/nsStr.h b/mozilla/xpcom/string/obsolete/nsStr.h index daf814e797e..5f194705a99 100644 --- a/mozilla/xpcom/string/obsolete/nsStr.h +++ b/mozilla/xpcom/string/obsolete/nsStr.h @@ -183,15 +183,17 @@ class nsIMemoryAgent; class NS_COM CBufDescriptor { public: - CBufDescriptor(char* aString, PRBool aStackBased,PRUint32 aCapacity,PRInt32 aLength=-1); - CBufDescriptor(PRUnichar* aString,PRBool aStackBased,PRUint32 aCapacity,PRInt32 aLength=-1); + CBufDescriptor(char* aString, PRBool aStackBased,PRUint32 aCapacity,PRInt32 aLength=-1); + CBufDescriptor(const char* aString, PRBool aStackBased,PRUint32 aCapacity,PRInt32 aLength=-1); + CBufDescriptor(PRUnichar* aString, PRBool aStackBased,PRUint32 aCapacity,PRInt32 aLength=-1); + CBufDescriptor(const PRUnichar* aString,PRBool aStackBased,PRUint32 aCapacity,PRInt32 aLength=-1); char* mBuffer; eCharSize mCharSize; PRUint32 mCapacity; PRInt32 mLength; PRBool mStackBased; - + PRBool mIsConst; }; //---------------------------------------------------------------------------------------- diff --git a/mozilla/xpcom/string/obsolete/nsString.cpp b/mozilla/xpcom/string/obsolete/nsString.cpp index b3a868dcca8..1b9109be5d6 100644 --- a/mozilla/xpcom/string/obsolete/nsString.cpp +++ b/mozilla/xpcom/string/obsolete/nsString.cpp @@ -1753,7 +1753,8 @@ nsCAutoString::nsCAutoString(const CBufDescriptor& aBuffer) : nsCString() { else { nsStr::Initialize(*this,aBuffer.mBuffer,aBuffer.mCapacity,aBuffer.mLength,aBuffer.mCharSize,!aBuffer.mStackBased); } - AddNullTerminator(*this); //this isn't really needed, but it guarantees that folks don't pass string constants. + if(!aBuffer.mIsConst) + AddNullTerminator(*this); //this isn't really needed, but it guarantees that folks don't pass string constants. } /** diff --git a/mozilla/xpcom/string/obsolete/nsString2.cpp b/mozilla/xpcom/string/obsolete/nsString2.cpp index 58efcd34710..2049c9d1b17 100644 --- a/mozilla/xpcom/string/obsolete/nsString2.cpp +++ b/mozilla/xpcom/string/obsolete/nsString2.cpp @@ -109,6 +109,7 @@ nsString::nsString(const nsString& aString) :mAgent(aString.mAgent) { * @param reference to a subsumeString */ nsString::nsString(nsSubsumeStr& aSubsumeStr) :mAgent(0) { + nsStr::Initialize(*this,eTwoByte); Subsume(*this,aSubsumeStr); } @@ -2149,7 +2150,8 @@ nsAutoString::nsAutoString(const CBufDescriptor& aBuffer) : nsString() { else { nsStr::Initialize(*this,aBuffer.mBuffer,aBuffer.mCapacity,aBuffer.mLength,aBuffer.mCharSize,!aBuffer.mStackBased); } - AddNullTerminator(*this); + if(!aBuffer.mIsConst) + AddNullTerminator(*this); }