From c54400e68f946b83e8e03ce8d2d73d3449be6f43 Mon Sep 17 00:00:00 2001 From: "bzbarsky%mit.edu" Date: Wed, 4 Dec 2002 06:07:50 +0000 Subject: [PATCH] UTFInputStream does not do very good error-recovery, so always use nsConverterInputStream instead. Bug 183165, r=timeless, sr=sspitzer, general approval=dbaron git-svn-id: svn://10.0.0.236/trunk@134779 18797224-902f-48f8-a5cc-f745e15eee43 --- .../content/html/style/src/nsCSSLoader.cpp | 24 +++++++++++++++---- mozilla/layout/style/nsCSSLoader.cpp | 24 +++++++++++++++---- 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/mozilla/content/html/style/src/nsCSSLoader.cpp b/mozilla/content/html/style/src/nsCSSLoader.cpp index 410a8d2df26..7a9b70b6c68 100644 --- a/mozilla/content/html/style/src/nsCSSLoader.cpp +++ b/mozilla/content/html/style/src/nsCSSLoader.cpp @@ -1534,17 +1534,31 @@ CSSLoaderImpl::LoadSheet(SheetLoadData* aLoadData, StyleSheetState aSheetState) return rv; } - nsCOMPtr unicharStream; - // This forces UA sheets to be UTF8, but that's ok, right? - rv = NS_NewUTF8ConverterStream(getter_AddRefs(unicharStream), stream, 0); + nsCOMPtr converterStream = + do_CreateInstance("@mozilla.org/intl/converter-input-stream;1", &rv); + if (NS_FAILED(rv)) { - LOG_ERROR((" Failed to create UTF8 stream")); + LOG_ERROR((" Failed to create converter stream")); + SheetComplete(aLoadData, PR_FALSE); + return rv; + } + + // This forces UA sheets to be UTF-8. We should really look for + // @charset rules here via ReadSegments on the raw stream... + + // 8092 is a nice magic number that happens to be what a lot of + // other things use for buffer sizes. + rv = converterStream->Init(stream, NS_LITERAL_STRING("UTF-8").get(), + 8092, PR_TRUE); + + if (NS_FAILED(rv)) { + LOG_ERROR((" Failed to initialize converter stream")); SheetComplete(aLoadData, PR_FALSE); return rv; } PRBool completed; - rv = ParseSheet(unicharStream, aLoadData, completed); + rv = ParseSheet(converterStream, aLoadData, completed); NS_ASSERTION(completed, "sync load did not complete"); return rv; } diff --git a/mozilla/layout/style/nsCSSLoader.cpp b/mozilla/layout/style/nsCSSLoader.cpp index 410a8d2df26..7a9b70b6c68 100644 --- a/mozilla/layout/style/nsCSSLoader.cpp +++ b/mozilla/layout/style/nsCSSLoader.cpp @@ -1534,17 +1534,31 @@ CSSLoaderImpl::LoadSheet(SheetLoadData* aLoadData, StyleSheetState aSheetState) return rv; } - nsCOMPtr unicharStream; - // This forces UA sheets to be UTF8, but that's ok, right? - rv = NS_NewUTF8ConverterStream(getter_AddRefs(unicharStream), stream, 0); + nsCOMPtr converterStream = + do_CreateInstance("@mozilla.org/intl/converter-input-stream;1", &rv); + if (NS_FAILED(rv)) { - LOG_ERROR((" Failed to create UTF8 stream")); + LOG_ERROR((" Failed to create converter stream")); + SheetComplete(aLoadData, PR_FALSE); + return rv; + } + + // This forces UA sheets to be UTF-8. We should really look for + // @charset rules here via ReadSegments on the raw stream... + + // 8092 is a nice magic number that happens to be what a lot of + // other things use for buffer sizes. + rv = converterStream->Init(stream, NS_LITERAL_STRING("UTF-8").get(), + 8092, PR_TRUE); + + if (NS_FAILED(rv)) { + LOG_ERROR((" Failed to initialize converter stream")); SheetComplete(aLoadData, PR_FALSE); return rv; } PRBool completed; - rv = ParseSheet(unicharStream, aLoadData, completed); + rv = ParseSheet(converterStream, aLoadData, completed); NS_ASSERTION(completed, "sync load did not complete"); return rv; }