/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/** * Helper for performing a fallible unescape. * * @param aStr The string to unescape. * @param aBuffer Buffer to unescape into if necessary. * @param rv Out: nsresult indicating success or failure of unescaping. * @return Reference to the string containing the unescaped data.
*/ const nsACString& Unescape(const nsACString& aStr, nsACString& aBuffer,
nsresult* rv) {
MOZ_ASSERT(rv);
// In order to avoid potentially building up a new path including the // ref portion of the URI, which we don't care about, we clone a version // of the URI that does not have a ref and in most cases should share // string buffers with the original URI.
nsCOMPtr<nsIURI> uri;
rv = NS_GetURIWithoutRef(URI(), getter_AddRefs(uri)); if (NS_FAILED(rv)) return rv;
nsAutoCString path;
rv = uri->GetPathQueryRef(path); if (NS_FAILED(rv)) return rv;
// This will avoid a copy if nothing needs to be unescaped.
nsAutoCString unescapedBuffer; const nsACString& data = Unescape(dataRange, unescapedBuffer, &rv); if (NS_FAILED(rv)) { return rv;
}
if (lBase64 && &data == &unescapedBuffer) { // Don't allow spaces in base64-encoded content. This is only // relevant for escaped spaces; other spaces are stripped in // NewURI. We know there were no escaped spaces if the data buffer // wasn't used in |Unescape|.
unescapedBuffer.StripWhitespace();
}
nsCOMPtr<nsIInputStream> bufInStream;
uint32_t contentLen; if (lBase64) {
nsAutoCString decodedData;
rv = Base64Decode(data, decodedData); if (NS_FAILED(rv)) { // Returning this error code instead of what Base64Decode returns // (NS_ERROR_ILLEGAL_VALUE) will prevent rendering of redirect response // content by HTTP channels. It's also more logical error to return. // Here we know the URL is actually corrupted. return NS_ERROR_MALFORMED_URI;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.