Submitted By: Hatzimanikas Agathoklis (a dot hatzim at gmail dot com)
Date: 2007-02-25
Initial Package Version: 1.1
Origin: Upstream
Upstream Status: Applied
Description: Fixes security flaw.
https://bugzilla.mozilla.org/show_bug.cgi?id=370445
diff -Naur mozilla.orig/netwerk/base/src/nsSimpleURI.cpp mozilla/netwerk/base/src/nsSimpleURI.cpp
old
|
new
|
|
155 | 155 | NS_EscapeURL(specPtr, specLen, esc_OnlyNonASCII|esc_AlwaysCopy, spec); |
156 | 156 | |
157 | 157 | PRInt32 pos = spec.FindChar(':'); |
158 | | if (pos == -1) |
| 158 | if (pos == -1 || !net_IsValidScheme(spec.get(), pos)) |
159 | 159 | return NS_ERROR_MALFORMED_URI; |
160 | 160 | |
161 | 161 | mScheme.Truncate(); |
… |
… |
|
182 | 182 | NS_IMETHODIMP |
183 | 183 | nsSimpleURI::SetScheme(const nsACString &scheme) |
184 | 184 | { |
| 185 | const nsPromiseFlatCString &flat = PromiseFlatCString(scheme); |
| 186 | if (!net_IsValidScheme(flat)) { |
| 187 | NS_ERROR("the given url scheme contains invalid characters"); |
| 188 | return NS_ERROR_MALFORMED_URI; |
| 189 | } |
| 190 | |
185 | 191 | mScheme = scheme; |
186 | 192 | ToLowerCase(mScheme); |
187 | 193 | return NS_OK; |
diff -Naur mozilla.orig/netwerk/base/src/nsStandardURL.cpp mozilla/netwerk/base/src/nsStandardURL.cpp
old
|
new
|
|
504 | 504 | if (mHost.mLen > 0) { |
505 | 505 | const nsCSubstring& tempHost = |
506 | 506 | Substring(spec + mHost.mPos, spec + mHost.mPos + mHost.mLen); |
| 507 | if (tempHost.FindChar('\0') != kNotFound) |
| 508 | return NS_ERROR_MALFORMED_URI; // null embedded in hostname |
507 | 509 | if ((useEncHost = NormalizeIDN(tempHost, encHost))) |
508 | 510 | approxLen += encHost.Length(); |
509 | 511 | else |
… |
… |
|
1408 | 1410 | return NS_ERROR_UNEXPECTED; |
1409 | 1411 | } |
1410 | 1412 | |
| 1413 | if (host && strlen(host) < flat.Length()) |
| 1414 | return NS_ERROR_MALFORMED_URI; // found embedded null |
| 1415 | |
1411 | 1416 | InvalidateCache(); |
1412 | 1417 | mHostEncoding = eEncoding_ASCII; |
1413 | 1418 | |
diff -Naur mozilla.orig/netwerk/base/src/nsURLHelper.cpp mozilla/netwerk/base/src/nsURLHelper.cpp
old
|
new
|
|
507 | 507 | PRBool |
508 | 508 | net_IsValidScheme(const char *scheme, PRUint32 schemeLen) |
509 | 509 | { |
510 | | // first char much be alpha |
| 510 | // first char must be alpha |
511 | 511 | if (!nsCRT::IsAsciiAlpha(*scheme)) |
512 | 512 | return PR_FALSE; |
513 | | |
514 | | for (; schemeLen && *scheme; ++scheme, --schemeLen) { |
| 513 | |
| 514 | // nsCStrings may have embedded nulls -- reject those too |
| 515 | for (; schemeLen; ++scheme, --schemeLen) { |
515 | 516 | if (!(nsCRT::IsAsciiAlpha(*scheme) || |
516 | 517 | nsCRT::IsAsciiDigit(*scheme) || |
517 | 518 | *scheme == '+' || |