From 1eb8f9143f75d40cf97a6c1e8e8453af4b8a6a7b Mon Sep 17 00:00:00 2001 From: "ftang%netscape.com" Date: Mon, 31 Jul 2000 00:40:20 +0000 Subject: [PATCH] fix for bug 26938. r=tao a=ftang. fix \u encoding conversion so \n \r \t\ will be convert to \n \r \t --- intl/uconv/ucvlatin/nsUEscapeToUnicode.cpp | 11 +++++++++++ intl/uconv/ucvlatin/nsUnicodeToUEscape.cpp | 15 +++++++++++---- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/intl/uconv/ucvlatin/nsUEscapeToUnicode.cpp b/intl/uconv/ucvlatin/nsUEscapeToUnicode.cpp index 7ce9e88cff6f..5d90830f4434 100644 --- a/intl/uconv/ucvlatin/nsUEscapeToUnicode.cpp +++ b/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/intl/uconv/ucvlatin/nsUnicodeToUEscape.cpp b/intl/uconv/ucvlatin/nsUnicodeToUEscape.cpp index 8cbdb0d5a462..1d770a79b33b 100644 --- a/intl/uconv/ucvlatin/nsUnicodeToUEscape.cpp +++ b/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; }