diff --git a/mozilla/intl/uconv/ucvlatin/nsUEscapeToUnicode.cpp b/mozilla/intl/uconv/ucvlatin/nsUEscapeToUnicode.cpp index 7ce9e88cff6..5d90830f443 100644 --- a/mozilla/intl/uconv/ucvlatin/nsUEscapeToUnicode.cpp +++ b/mozilla/intl/uconv/ucvlatin/nsUEscapeToUnicode.cpp @@ -104,6 +104,17 @@ NS_IMETHODIMP nsUEscapeToUnicode::Convert( if(('u' == *srcPtr) || ('U' == *srcPtr)) { mState++; mData=0; + } else if(('n' == *srcPtr) || ('r' == *srcPtr) || ('t' == *srcPtr)) { + mState =0; + if((destPtr+2) >= destEnd) { + // notice the data in mBuffer is stored in reversed order + mBufferLen = 2; + mBuffer[1] = PRUnichar('\\') ; + mBuffer[0] = (PRUnichar)*srcPtr; + goto error; + } + *destPtr++ = PRUnichar('\\'); + *destPtr++ = (PRUnichar)*srcPtr; } else { mState =0; *destPtr++ = (PRUnichar)*srcPtr; diff --git a/mozilla/intl/uconv/ucvlatin/nsUnicodeToUEscape.cpp b/mozilla/intl/uconv/ucvlatin/nsUnicodeToUEscape.cpp index 8cbdb0d5a46..1d770a79b33 100644 --- a/mozilla/intl/uconv/ucvlatin/nsUnicodeToUEscape.cpp +++ b/mozilla/intl/uconv/ucvlatin/nsUnicodeToUEscape.cpp @@ -101,10 +101,17 @@ NS_IMETHODIMP nsUnicodeToUEscape::Convert(const PRUnichar * aSrc, PRInt32 * aSrc { if( PRUnichar('\\') == *src) { - if((dest +2 ) >= destEnd) - goto error; - *dest++ = (char) '\\'; - *dest++ = (char) '\\'; + if(( PRUnichar('n') == *(1+src))|| + ( PRUnichar('r') == *(1+src))|| + ( PRUnichar('t') == *(1+src))) + { + *dest++ = (char) *src; + } else { + if((dest +2 ) >= destEnd) + goto error; + *dest++ = (char) '\\'; + *dest++ = (char) '\\'; + } } else { *dest++ = (char) *src; }