void nsCertOverride::convertBitsToString(OverrideBits ob, nsACString &str) { str.Truncate(); if (ob & ob_Mismatch) str.Append('M'); if (ob & ob_Untrusted) str.Append('U'); if (ob & ob_Time_error) str.Append('T'); }
NS_IMETHODIMP nsNNTPNewsgroupList::InitXHDR(nsACString &header) { if (++m_currentXHDRIndex >= m_filterHeaders.Length()) header.Truncate(); else header.Assign(m_filterHeaders[m_currentXHDRIndex]); // Don't include these in our XHDR bouts, as they are already provided through // XOVER. if (header.EqualsLiteral("message-id") || header.EqualsLiteral("references")) return InitXHDR(header); return NS_OK; }
NS_IMETHODIMP HttpBaseChannel::nsContentEncodings::GetNext(nsACString& aNextEncoding) { aNextEncoding.Truncate(); if (!mReady) { nsresult rv = PrepareForNext(); if (NS_FAILED(rv)) { return NS_ERROR_FAILURE; } } const nsACString & encoding = Substring(mCurStart, mCurEnd); nsACString::const_iterator start, end; encoding.BeginReading(start); encoding.EndReading(end); bool haveType = false; if (CaseInsensitiveFindInReadable(NS_LITERAL_CSTRING("gzip"), start, end)) { aNextEncoding.AssignLiteral(APPLICATION_GZIP); haveType = true; } if (!haveType) { encoding.BeginReading(start); if (CaseInsensitiveFindInReadable(NS_LITERAL_CSTRING("compress"), start, end)) { aNextEncoding.AssignLiteral(APPLICATION_COMPRESS); haveType = true; } } if (!haveType) { encoding.BeginReading(start); if (CaseInsensitiveFindInReadable(NS_LITERAL_CSTRING("deflate"), start, end)) { aNextEncoding.AssignLiteral(APPLICATION_ZIP); haveType = true; } } // Prepare to fetch the next encoding mCurEnd = mCurStart; mReady = false; if (haveType) return NS_OK; NS_WARNING("Unknown encoding type"); return NS_ERROR_FAILURE; }
nsresult _OldStorage::AssembleCacheKey(nsIURI *aURI, nsACString const & aIdExtension, nsACString & aCacheKey, nsACString & aScheme) { // Copied from nsHttpChannel::AssembleCacheKey aCacheKey.Truncate(); nsresult rv; rv = aURI->GetScheme(aScheme); NS_ENSURE_SUCCESS(rv, rv); nsAutoCString uriSpec; if (aScheme.EqualsLiteral("http") || aScheme.EqualsLiteral("https")) { if (mLoadInfo->IsAnonymous()) { aCacheKey.AssignLiteral("anon&"); } if (!aIdExtension.IsEmpty()) { aCacheKey.AppendPrintf("id=%s&", aIdExtension.BeginReading()); } nsCOMPtr<nsIURI> noRefURI; rv = aURI->CloneIgnoringRef(getter_AddRefs(noRefURI)); NS_ENSURE_SUCCESS(rv, rv); rv = noRefURI->GetAsciiSpec(uriSpec); NS_ENSURE_SUCCESS(rv, rv); if (!aCacheKey.IsEmpty()) { aCacheKey.AppendLiteral("uri="); } } else if (aScheme.EqualsLiteral("wyciwyg")) { rv = aURI->GetSpec(uriSpec); NS_ENSURE_SUCCESS(rv, rv); } else { rv = aURI->GetAsciiSpec(uriSpec); NS_ENSURE_SUCCESS(rv, rv); } aCacheKey.Append(uriSpec); return NS_OK; }
/* ACString ConvertUTF8toACE (in AUTF8String input); */ NS_IMETHODIMP nsIDNService::ConvertUTF8toACE(const nsACString & input, nsACString & ace) { // protect against bogus input NS_ENSURE_TRUE(IsUTF8(input), NS_ERROR_UNEXPECTED); nsresult rv; NS_ConvertUTF8toUCS2 ustr(input); // map ideographic period to ASCII period etc. normalizeFullStops(ustr); PRUint32 len, offset; len = 0; offset = 0; nsCAutoString encodedBuf; nsAString::const_iterator start, end; ustr.BeginReading(start); ustr.EndReading(end); ace.Truncate(); // encode nodes if non ASCII while (start != end) { len++; if (*start++ == (PRUnichar)'.') { rv = stringPrepAndACE(Substring(ustr, offset, len - 1), encodedBuf); NS_ENSURE_SUCCESS(rv, rv); ace.Append(encodedBuf); ace.Append('.'); offset += len; len = 0; } } // add extra node for multilingual test bed if (mMultilingualTestBed) ace.AppendLiteral("mltbd."); // encode the last node if non ASCII if (len) { rv = stringPrepAndACE(Substring(ustr, offset, len), encodedBuf); NS_ENSURE_SUCCESS(rv, rv); ace.Append(encodedBuf); } return NS_OK; }
/** * Given a string which contains a list of Header addresses, returns a * comma-separated list of just the `mailbox' portions. */ NS_IMETHODIMP nsMsgHeaderParser::ExtractHeaderAddressMailboxes(const nsACString &aLine, nsACString &aResult) { if (aLine.IsEmpty()) { aResult.Truncate(); return NS_OK; } char *addrs = 0; int status = msg_parse_Header_addresses(PromiseFlatCString(aLine).get(), NULL, &addrs); if (status <= 0) return NS_ERROR_OUT_OF_MEMORY; char *s = addrs; PRUint32 i, size = 0; for (i = 0; (int) i < status; i++) { PRUint32 j = strlen(s); s += j + 1; size += j; if ((int)(i + 1) < status) size += 2; } nsCString result; result.SetLength(size); s = addrs; char* out = result.BeginWriting(); for (i = 0; (int)i < status; i++) { PRUint32 j = strlen(s); memcpy(out, s, j); out += j; if ((int)(i+1) < status) { *out++ = ','; *out++ = ' '; } s += j + 1; } PR_Free(addrs); aResult = result; return NS_OK; }
nsresult nsIDNService::ACEtoUTF8(const nsACString & input, nsACString & _retval, stringPrepFlag flag) { // RFC 3490 - 4.2 ToUnicode // ToUnicode never fails. If any step fails, then the original input // sequence is returned immediately in that step. // // Note that this refers to the decoding of a single label. // ACEtoUTF8 may be called with a sequence of labels separated by dots; // this test applies individually to each label. uint32_t len = 0, offset = 0; nsAutoCString decodedBuf; nsACString::const_iterator start, end; input.BeginReading(start); input.EndReading(end); _retval.Truncate(); // loop and decode nodes while (start != end) { len++; if (*start++ == '.') { nsDependentCSubstring origLabel(input, offset, len - 1); if (NS_FAILED(decodeACE(origLabel, decodedBuf, flag))) { // If decoding failed, use the original input sequence // for this label. _retval.Append(origLabel); } else { _retval.Append(decodedBuf); } _retval.Append('.'); offset += len; len = 0; } } // decode the last node if (len) { nsDependentCSubstring origLabel(input, offset, len); if (NS_FAILED(decodeACE(origLabel, decodedBuf, flag))) { _retval.Append(origLabel); } else { _retval.Append(decodedBuf); } } return NS_OK; }
NS_IMETHODIMP RustURL::GetSpecIgnoringRef(nsACString & aSpecIgnoringRef) { nsresult rv = GetSpec(aSpecIgnoringRef); if (NS_FAILED(rv)) { return rv; } int32_t pos = aSpecIgnoringRef.FindChar('#'); if (pos == kNotFound) { return NS_OK; } aSpecIgnoringRef.Truncate(pos); return NS_OK; }
NS_IMETHODIMP nsAbCardProperty::GetUuid(nsACString &uuid) { // If we have indeterminate sub-ids, return an empty uuid. if (m_directoryId.Equals("") || m_localId.Equals("")) { uuid.Truncate(); return NS_OK; } nsresult rv; nsCOMPtr<nsIAbManager> manager = do_GetService(NS_ABMANAGER_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv, rv); return manager->GenerateUUID(m_directoryId, m_localId, uuid); }
/** Computes in the location specified by base64Out the SHA256 digest of the DER Encoded subject Public Key Info for the given cert */ static nsresult GetBase64HashSPKI(const CERTCertificate* cert, nsACString& hashSPKIDigest) { hashSPKIDigest.Truncate(); Digest digest; nsresult rv = digest.DigestBuf(SEC_OID_SHA256, cert->derPublicKey.data, cert->derPublicKey.len); if (NS_FAILED(rv)) { return rv; } return Base64Encode(nsDependentCSubstring( reinterpret_cast<const char*>(digest.get().data), digest.get().len), hashSPKIDigest); }
nsresult nsUnixSystemProxySettings::GetPACURI(nsACString& aResult) { if (mProxySettings) { nsCString proxyMode; // Check if mode is auto nsresult rv = mProxySettings->GetString(NS_LITERAL_CSTRING("mode"), proxyMode); if (rv == NS_OK && proxyMode.EqualsLiteral("auto")) { return mProxySettings->GetString(NS_LITERAL_CSTRING("autoconfig-url"), aResult); } /* The org.gnome.system.proxy schema has been found, but auto mode is not set. * Don't try the GConf and return empty string. */ aResult.Truncate(); return NS_OK; } if (mGConf && IsProxyMode("auto")) { return mGConf->GetString(NS_LITERAL_CSTRING("/system/proxy/autoconfig_url"), aResult); } // Return an empty string when auto mode is not set. aResult.Truncate(); return NS_OK; }
/* static */ nsresult DocGroup::GetKey(nsIPrincipal* aPrincipal, nsACString& aKey) { // Use GetBaseDomain() to handle things like file URIs, IP address URIs, // etc. correctly. nsresult rv = aPrincipal->GetBaseDomain(aKey); if (NS_FAILED(rv)) { // We don't really know what to do here. But we should be conservative, // otherwise it would be possible to reorder two events incorrectly in the // future if we interrupt at the DocGroup level, so to be safe, use an // empty string to classify all such documents as belonging to the same // DocGroup. aKey.Truncate(); } return rv; }
nsresult nsIDNService::stringPrepAndACE(const nsAString& in, nsACString& out, stringPrepFlag flag) { nsresult rv = NS_OK; out.Truncate(); if (in.Length() > kMaxDNSNodeLen) { NS_WARNING("IDN node too large"); return NS_ERROR_FAILURE; } if (IsASCII(in)) { LossyCopyUTF16toASCII(in, out); return NS_OK; } nsAutoString strPrep; rv = stringPrep(in, strPrep, flag); if (flag == eStringPrepForDNS) { NS_ENSURE_SUCCESS(rv, rv); } if (IsASCII(strPrep)) { LossyCopyUTF16toASCII(strPrep, out); return NS_OK; } if (flag == eStringPrepForUI && NS_SUCCEEDED(rv) && isLabelSafe(in)) { CopyUTF16toUTF8(strPrep, out); return NS_OK; } rv = punycode(strPrep, out); // Check that the encoded output isn't larger than the maximum length // of a DNS node per RFC 1034. // This test isn't necessary in the code paths above where the input // is ASCII (since the output will be the same length as the input) or // where we convert to UTF-8 (since the output is only used for // display in the UI and not passed to DNS and can legitimately be // longer than the limit). if (out.Length() > kMaxDNSNodeLen) { NS_WARNING("IDN node too large"); return NS_ERROR_FAILURE; } return rv; }
void ICUUtils::LanguageTagIterForContent::GetNext(nsACString& aBCP47LangTag) { if (mCurrentFallbackIndex < 0) { mCurrentFallbackIndex = 0; // Try the language specified by a 'lang'/'xml:lang' attribute on mContent // or any ancestor, if such an attribute is specified: nsAutoString lang; mContent->GetLang(lang); if (!lang.IsEmpty()) { aBCP47LangTag = NS_ConvertUTF16toUTF8(lang); return; } } if (mCurrentFallbackIndex < 1) { mCurrentFallbackIndex = 1; // Else try the language specified by any Content-Language HTTP header or // pragma directive: nsIDocument* doc = mContent->OwnerDoc(); nsAutoString lang; doc->GetContentLanguage(lang); if (!lang.IsEmpty()) { aBCP47LangTag = NS_ConvertUTF16toUTF8(lang); return; } } if (mCurrentFallbackIndex < 2) { mCurrentFallbackIndex = 2; // Else try the user-agent's locale: nsCOMPtr<nsIToolkitChromeRegistry> cr = mozilla::services::GetToolkitChromeRegistryService(); nsAutoCString uaLangTag; if (cr) { cr->GetSelectedLocale(NS_LITERAL_CSTRING("global"), uaLangTag); } if (!uaLangTag.IsEmpty()) { aBCP47LangTag = uaLangTag; return; } } // TODO: Probably not worth it, but maybe have a fourth fallback to using // the OS locale? aBCP47LangTag.Truncate(); // Signal iterator exhausted }
nsresult nsIDNService::UTF8toACE(const nsACString & input, nsACString & ace, bool allowUnassigned, bool convertAllLabels) { nsresult rv; NS_ConvertUTF8toUTF16 ustr(input); // map ideographic period to ASCII period etc. normalizeFullStops(ustr); uint32_t len, offset; len = 0; offset = 0; nsAutoCString encodedBuf; nsAString::const_iterator start, end; ustr.BeginReading(start); ustr.EndReading(end); ace.Truncate(); // encode nodes if non ASCII while (start != end) { len++; if (*start++ == (char16_t)'.') { rv = stringPrepAndACE(Substring(ustr, offset, len - 1), encodedBuf, allowUnassigned, convertAllLabels); NS_ENSURE_SUCCESS(rv, rv); ace.Append(encodedBuf); ace.Append('.'); offset += len; len = 0; } } // add extra node for multilingual test bed if (mMultilingualTestBed) ace.AppendLiteral("mltbd."); // encode the last node if non ASCII if (len) { rv = stringPrepAndACE(Substring(ustr, offset, len), encodedBuf, allowUnassigned, convertAllLabels); NS_ENSURE_SUCCESS(rv, rv); ace.Append(encodedBuf); } return NS_OK; }
nsresult DOMStorageImpl::GetCachedValue(const nsACString& aKey, nsACString& aValue, bool* aSecure) { aValue.Truncate(); *aSecure = false; nsSessionStorageEntry *entry = mItems.GetEntry(aKey); if (!entry) return NS_ERROR_NOT_AVAILABLE; aValue = entry->mItem->GetValueInternal(); *aSecure = entry->mItem->IsSecure(); return NS_OK; }
template<> nsresult BodyExtractor<nsIInputStream>::GetAsStream(nsIInputStream** aResult, uint64_t* aContentLength, nsACString& aContentTypeWithCharset, nsACString& aCharset) const { aContentTypeWithCharset.AssignLiteral("text/plain"); aCharset.Truncate(); nsresult rv = mBody->Available(aContentLength); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIInputStream> stream(mBody); stream.forget(aResult); return NS_OK; }
void ExtractFirstAddress(const nsCOMArray<msgIAddressObject> &aHeader, nsAString &name, nsACString &email) { nsAutoTArray<nsString, 1> names, emails; ExtractAllAddresses(aHeader, names, emails); if (names.Length() > 0) { name = names[0]; CopyUTF16toUTF8(emails[0], email); } else { name.Truncate(); email.Truncate(); } }
NS_IMETHODIMP HttpBaseChannel::GetContentType(nsACString& aContentType) { if (!mResponseHead) { aContentType.Truncate(); return NS_ERROR_NOT_AVAILABLE; } if (!mResponseHead->ContentType().IsEmpty()) { aContentType = mResponseHead->ContentType(); return NS_OK; } aContentType.AssignLiteral(UNKNOWN_CONTENT_TYPE); return NS_OK; }
nsresult nsIDNService::ACEtoUTF8(const nsACString & input, nsACString & _retval, bool allowUnassigned) { // RFC 3490 - 4.2 ToUnicode // ToUnicode never fails. If any step fails, then the original input // sequence is returned immediately in that step. if (!IsASCII(input)) { _retval.Assign(input); return NS_OK; } uint32_t len = 0, offset = 0; nsAutoCString decodedBuf; nsACString::const_iterator start, end; input.BeginReading(start); input.EndReading(end); _retval.Truncate(); // loop and decode nodes while (start != end) { len++; if (*start++ == '.') { if (NS_FAILED(decodeACE(Substring(input, offset, len - 1), decodedBuf, allowUnassigned))) { _retval.Assign(input); return NS_OK; } _retval.Append(decodedBuf); _retval.Append('.'); offset += len; len = 0; } } // decode the last node if (len) { if (NS_FAILED(decodeACE(Substring(input, offset, len), decodedBuf, allowUnassigned))) _retval.Assign(input); else _retval.Append(decodedBuf); } return NS_OK; }
nsresult nsDOMStorageDBWrapper::CreateQuotaDBKey(nsIPrincipal* aPrincipal, nsACString& aKey) { nsresult rv; nsAutoCString subdomainsDBKey; nsCOMPtr<nsIEffectiveTLDService> eTLDService(do_GetService( NS_EFFECTIVETLDSERVICE_CONTRACTID, &rv)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIURI> uri; rv = aPrincipal->GetURI(getter_AddRefs(uri)); NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_TRUE(uri, NS_ERROR_UNEXPECTED); nsAutoCString eTLDplusOne; rv = eTLDService->GetBaseDomain(uri, 0, eTLDplusOne); if (NS_ERROR_INSUFFICIENT_DOMAIN_LEVELS == rv) { // XXX bug 357323 - what to do for localhost/file exactly? rv = uri->GetAsciiHost(eTLDplusOne); } NS_ENSURE_SUCCESS(rv, rv); CreateReversedDomain(eTLDplusOne, subdomainsDBKey); uint32_t appId; rv = aPrincipal->GetAppId(&appId); NS_ENSURE_SUCCESS(rv, rv); bool isInBrowserElement; rv = aPrincipal->GetIsInBrowserElement(&isInBrowserElement); NS_ENSURE_SUCCESS(rv, rv); if (appId == nsIScriptSecurityManager::NO_APP_ID && !isInBrowserElement) { aKey.Assign(subdomainsDBKey); return NS_OK; } aKey.Truncate(); aKey.AppendInt(appId); aKey.Append(NS_LITERAL_CSTRING(":") + (isInBrowserElement ? NS_LITERAL_CSTRING("t") : NS_LITERAL_CSTRING("f")) + NS_LITERAL_CSTRING(":") + subdomainsDBKey); return NS_OK; }
//-------------------------------------------------------------- NS_IMETHODIMP nsCharsetAlias2::GetPreferred(const nsACString& aAlias, nsACString& oResult) { if (aAlias.IsEmpty()) return NS_ERROR_NULL_POINTER; NS_TIMELINE_START_TIMER("nsCharsetAlias2:GetPreferred"); // Delay loading charsetalias.properties by hardcoding the most // frequent aliases. Note that it's possible to recur in to this // function *while loading* charsetalias.properties (see bug 190951), // so we might have an |mDelegate| already that isn't valid yet, but // the load is guaranteed to be "UTF-8" so things will be OK. for (PRUint32 index = 0; index < NS_ARRAY_LENGTH(kAliases); index++) { if (aAlias.LowerCaseEqualsASCII(kAliases[index][0])) { oResult.Assign(nsDependentCString(kAliases[index][1], NS_PTR_TO_UINT32(kAliases[index][2]))); NS_TIMELINE_STOP_TIMER("nsCharsetAlias2:GetPreferred"); return NS_OK; } } oResult.Truncate(); if(!mDelegate) { //load charsetalias.properties string bundle with all remaining aliases // we may need to protect the following section with a lock so we won't call the // 'new nsGREResProperties' from two different threads mDelegate = new nsGREResProperties( NS_LITERAL_CSTRING("charsetalias.properties") ); NS_ASSERTION(mDelegate, "cannot create nsGREResProperties"); if(nsnull == mDelegate) return NS_ERROR_OUT_OF_MEMORY; } NS_TIMELINE_STOP_TIMER("nsCharsetAlias2:GetPreferred"); NS_TIMELINE_MARK_TIMER("nsCharsetAlias2:GetPreferred"); nsCAutoString key(aAlias); ToLowerCase(key); // hack for now, have to fix nsGREResProperties, but we can't until // string bundles use UTF8 keys nsAutoString result; nsresult rv = mDelegate->Get(NS_ConvertASCIItoUTF16(key), result); LossyAppendUTF16toASCII(result, oResult); return rv; }
NS_INTERFACE_MAP_END //////////////////////////////////////////////////////////////////////////////// // nsIRequest methods: NS_IMETHODIMP nsLoadGroup::GetName(nsACString &result) { // XXX is this the right "name" for a load group? if (!mDefaultLoadRequest) { result.Truncate(); return NS_OK; } return mDefaultLoadRequest->GetName(result); }
void nsCertOverride::convertBitsToString(OverrideBits ob, /*out*/ nsACString& str) { str.Truncate(); if (ob & OverrideBits::Mismatch) { str.Append('M'); } if (ob & OverrideBits::Untrusted) { str.Append('U'); } if (ob & OverrideBits::Time) { str.Append('T'); } }
NS_IMETHODIMP nsLDAPURL::GetAttributes(nsACString &aAttributes) { if (mAttributes.IsEmpty()) { aAttributes.Truncate(); return NS_OK; } NS_ASSERTION(mAttributes[0] == ',' && mAttributes[mAttributes.Length() - 1] == ',', "mAttributes does not begin and end with a comma"); // We store the string internally with comma before and after, so strip // them off here. aAttributes = Substring(mAttributes, 1, mAttributes.Length() - 2); return NS_OK; }
bool EncodingUtils::FindEncodingForLabel(const nsACString& aLabel, nsACString& aOutEncoding) { // Save aLabel first because it may refer the same string as aOutEncoding. nsCString label(aLabel); EncodingUtils::TrimSpaceCharacters(label); if (label.IsEmpty()) { aOutEncoding.Truncate(); return false; } ToLowerCase(label); return NS_SUCCEEDED(nsUConvPropertySearch::SearchPropertyValue( labelsEncodings, ArrayLength(labelsEncodings), label, aOutEncoding)); }
nsresult ChunkSet::Serialize(nsACString& aChunkStr) { aChunkStr.Truncate(); for (const Range& range : mRanges) { if (&range != &mRanges[0]) { aChunkStr.Append(','); } aChunkStr.AppendInt((int32_t)range.Begin()); if (range.Begin() != range.End()) { aChunkStr.Append('-'); aChunkStr.AppendInt((int32_t)range.End()); } } return NS_OK; }
static bool ReadLine(PRFileDesc* aFD, nsACString& aString) { // ntlm_auth is defined to only send one line in response to each of our // input lines. So this simple unbuffered strategy works as long as we // read the response immediately after sending one request. aString.Truncate(); for (;;) { char buf[1024]; int result = PR_Read(aFD, buf, sizeof(buf)); if (result <= 0) return false; aString.Append(buf, result); if (buf[result - 1] == '\n') { LOG(("Read from ntlm_auth: %s", nsPromiseFlatCString(aString).get())); return true; } } }
NS_IMETHODIMP nsBinaryInputStream::ReadCString(nsACString& aString) { nsresult rv; PRUint32 length, bytesRead; rv = Read32(&length); if (NS_FAILED(rv)) return rv; aString.Truncate(); rv = ReadSegments(WriteSegmentToCString, &aString, length, &bytesRead); if (NS_FAILED(rv)) return rv; if (bytesRead != length) return NS_ERROR_FAILURE; return NS_OK; }
NS_IMETHODIMP nsSafariProfileMigrator::GetSourceHomePageURL(nsACString& aResult) { aResult.Truncate(); // Let's first check if there's a home page key in the com.apple.safari file... CFDictionaryRef safariPrefs = CopySafariPrefs(); if (safariPrefs) { bool foundPref = GetDictionaryCStringValue(safariPrefs, CFSTR(SAFARI_HOME_PAGE_PREF), aResult, kCFStringEncodingUTF8); ::CFRelease(safariPrefs); if (foundPref) return NS_OK; } return NS_ERROR_FAILURE; }