Skip to content

Commit 537c757

Browse files
committed
More post-merge build fixes
1 parent fc78b66 commit 537c757

File tree

5 files changed

+38
-53
lines changed

5 files changed

+38
-53
lines changed

js/src/jstaint.cpp

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -93,19 +93,16 @@ std::u16string JS::taintarg(JSContext* cx, HandleString str)
9393
return std::u16string(buf.get(), len);
9494
}
9595

96-
std::u16string JS::taintarg_jsstring(JSContext* cx, JSString* const& str)
96+
std::u16string JS::taintarg_jsstring(JSContext* cx, const JSLinearString* const& str)
9797
{
9898
if (!str) {
9999
return std::u16string();
100100
}
101101

102102
size_t len = str->length();
103-
JSLinearString* linear = str->ensureLinear(cx);
104-
if (!linear)
105-
return std::u16string();
106103

107104
js::UniquePtr<char16_t, JS::FreePolicy> buf(cx->pod_malloc<char16_t>(len));
108-
js::CopyChars(buf.get(), *linear);
105+
js::CopyChars(buf.get(), *str);
109106
if(len > max_length) {
110107
// Taintfox was crashing after startup after copying start and end
111108
// of the long strings, so disable copying here
@@ -124,6 +121,14 @@ std::u16string JS::taintarg_jsstring(JSContext* cx, JSString* const& str)
124121
return std::u16string(buf.get(), len);
125122
}
126123

124+
std::u16string JS::taintarg_jsstring(JSContext* cx, JSString* const& str) {
125+
if (!str) {
126+
return std::u16string();
127+
}
128+
JSLinearString* linear = str->ensureLinear(cx);
129+
return taintarg_jsstring(cx, linear);
130+
}
131+
127132
std::u16string JS::taintarg_jsstring_full(JSContext* cx, JSString* const& str)
128133
{
129134
if (!str) {
@@ -219,6 +224,14 @@ std::vector<std::u16string> JS::taintargs_jsstring(JSContext* cx, JSString* cons
219224
return args;
220225
}
221226

227+
std::vector<std::u16string> JS::taintargs_jsstring(JSContext* cx, const JSLinearString* const& str1, const JSLinearString* const& str2)
228+
{
229+
std::vector<std::u16string> args;
230+
args.push_back(taintarg_jsstring(cx, str1));
231+
args.push_back(taintarg_jsstring(cx, str2));
232+
return args;
233+
}
234+
222235
std::string JS::convertDigestToHexString(const TaintMd5& digest)
223236
{
224237
std::stringstream ss;
@@ -302,6 +315,10 @@ TaintOperation JS::TaintOperationFromContextJSString(JSContext* cx, const char*
302315
return TaintOperation(name, is_native, TaintLocationFromContext(cx), taintargs_jsstring(cx, arg1, arg2));
303316
}
304317

318+
TaintOperation JS::TaintOperationFromContextJSString(JSContext* cx, const char* name, bool is_native, const JSLinearString* const& arg1, const JSLinearString* const& arg2) {
319+
return TaintOperation(name, is_native, TaintLocationFromContext(cx), taintargs_jsstring(cx, arg1, arg2));
320+
}
321+
305322

306323
TaintOperation JS::TaintOperationConcat(JSContext* cx, const char* name, bool is_native,
307324
JS::HandleString arg1, JS::HandleString arg2) {

js/src/jstaint.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ std::u16string taintarg_full(JSContext* cx, JS::HandleString str);
3535

3636
std::u16string taintarg_jsstring(JSContext* cx, JSString* const& str);
3737

38+
std::u16string taintarg_jsstring(JSContext* cx, const JSLinearString* const& str);
39+
3840
std::u16string taintarg_jsstring_full(JSContext* cx, JSString* const& str);
3941

4042
// Stringifies a JS object for use as a taint argument.
@@ -57,6 +59,8 @@ std::vector<std::u16string> taintargs(JSContext* cx, HandleString str1, HandleSt
5759

5860
std::vector<std::u16string> taintargs_jsstring(JSContext* cx, JSString* const& str1, JSString* const& str2);
5961

62+
std::vector<std::u16string> taintargs_jsstring(JSContext* cx, const JSLinearString* const& str1, const JSLinearString* const& str2);
63+
6064
std::string convertDigestToHexString(const TaintMd5& digest);
6165

6266
// Extracts the current filename, linenumber and function from the JSContext
@@ -73,6 +77,9 @@ TaintOperation TaintOperationFromContextJSString(JSContext* cx, const char* name
7377
TaintOperation TaintOperationFromContextJSString(JSContext* cx, const char* name, bool is_native,
7478
JSString* const& str1, JSString* const& str2);
7579

80+
TaintOperation TaintOperationFromContextJSString(JSContext* cx, const char* name, bool is_native,
81+
const JSLinearString* const& str1, const JSLinearString* const& str2);
82+
7683
TaintOperation TaintOperationConcat(JSContext* cx, const char* name, bool is_native,
7784
JS::HandleString str1, JS::HandleString str2);
7885

js/xpconnect/src/XPCString.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ bool xpc::NonVoidStringToJsval(JSContext* cx, const nsAString& readable,
6666
}
6767

6868
if (StringBuffer* buf = readable.GetStringBuffer()) {
69-
return XPCStringConvert::UCStringBufferToJSVal(cx, buf, readable.Taint(), length, vp);
69+
return XPCStringConvert::UCStringBufferToJSVal(cx, buf, length, vp);
7070
}
7171

7272
// blech, have to copy.
@@ -96,7 +96,7 @@ bool xpc::NonVoidLatin1StringToJsval(JSContext* cx, const nsACString& latin1,
9696
}
9797

9898
if (StringBuffer* buf = latin1.GetStringBuffer()) {
99-
return XPCStringConvert::Latin1StringBufferToJSVal(cx, buf, latin1.Taint(), length, vp);
99+
return XPCStringConvert::Latin1StringBufferToJSVal(cx, buf, length, vp);
100100
}
101101

102102
JSString* str = JS_NewStringCopyN(cx, latin1.BeginReading(), length);
@@ -123,7 +123,7 @@ bool xpc::NonVoidUTF8StringToJsval(JSContext* cx, const nsACString& utf8,
123123
}
124124

125125
if (StringBuffer* buf = utf8.GetStringBuffer()) {
126-
return XPCStringConvert::UTF8StringBufferToJSVal(cx, buf, length, utf8.Taint(), vp);
126+
return XPCStringConvert::UTF8StringBufferToJSVal(cx, buf, length, vp);
127127
}
128128

129129
JSString* str =

js/xpconnect/src/xpcpublic.h

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -254,17 +254,14 @@ class XPCStringConvert {
254254
// Convert the given stringbuffer/length pair to a jsval
255255
static MOZ_ALWAYS_INLINE bool UCStringBufferToJSVal(
256256
JSContext* cx, mozilla::StringBuffer* buf, uint32_t length,
257-
const StringTaint& taint,
258257
JS::MutableHandle<JS::Value> rval) {
259258
JSString* str = JS::NewStringFromKnownLiveTwoByteBuffer(cx, buf, length);
260259
if (!str) {
261260
return false;
262261
}
263262

264263
// TaintFox: Transfer taint information to newly created JS string.
265-
if (taint.hasTaint()) {
266-
JS_SetStringTaint(cx, str, taint);
267-
}
264+
JS_SetStringTaint(cx, str, buf->Taint());
268265

269266
rval.setString(str);
270267
return true;
@@ -519,7 +516,7 @@ inline bool NonVoidStringToJsval(JSContext* cx, mozilla::dom::DOMString& str,
519516
if (str.HasStringBuffer()) {
520517
uint32_t length = str.StringBufferLength();
521518
mozilla::StringBuffer* buf = str.StringBuffer();
522-
return XPCStringConvert::UCStringBufferToJSVal(cx, buf, length, str.Taint(), rval);
519+
return XPCStringConvert::UCStringBufferToJSVal(cx, buf, length, rval);
523520
}
524521

525522
if (str.HasLiteral()) {

netwerk/base/nsStandardURL.cpp

Lines changed: 4 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -891,33 +891,12 @@ nsresult nsStandardURL::BuildNormalizedSpec(const char* spec,
891891
// However, perform Unicode normalization on it, as IDN does.
892892
// Note that we don't disallow URLs without a host - file:, etc
893893
if (mHost.mLen > 0) {
894-
<<<<<<< HEAD
895-
nsAutoCString tempHost;
894+
nsDependentCSubstring tempHost(spec + mHost.mPos, mHost.mLen);
896895
SafeStringTaint mHostTaint;
897896
if (taint.hasTaint()) {
898897
mHostTaint = taint.safeSubTaint(mHost.mPos, mHost.mPos + mHost.mLen);
898+
tempHost.AssignTaint(mHostTaint);
899899
}
900-
NS_UnescapeURL(spec + mHost.mPos, mHost.mLen, mHostTaint, esc_AlwaysCopy | esc_Host,
901-
tempHost);
902-
if (tempHost.Contains('\0')) {
903-
return NS_ERROR_MALFORMED_URI; // null embedded in hostname
904-
}
905-
if (tempHost.Contains(' ')) {
906-
return NS_ERROR_MALFORMED_URI; // don't allow spaces in the hostname
907-
}
908-
nsresult rv = NormalizeIDN(tempHost, encHost);
909-
if (NS_FAILED(rv)) {
910-
return rv;
911-
}
912-
if (!SegmentIs(spec, mScheme, "resource") &&
913-
!SegmentIs(spec, mScheme, "chrome")) {
914-
nsAutoCString ipString;
915-
if (encHost.Length() > 0 && encHost.First() == '[' &&
916-
encHost.Last() == ']' &&
917-
ValidIPv6orHostname(encHost.get(), encHost.Length())) {
918-
rv = (nsresult)rusturl_parse_ipv6addr(&encHost, &ipString);
919-
=======
920-
nsDependentCSubstring tempHost(spec + mHost.mPos, mHost.mLen);
921900
nsresult rv;
922901
bool allowIp = !SegmentIs(spec, mScheme, "resource") &&
923902
!SegmentIs(spec, mScheme, "chrome");
@@ -935,7 +914,6 @@ nsresult nsStandardURL::BuildNormalizedSpec(const char* spec,
935914
if (EndsInANumber(encHost) && allowIp) {
936915
nsAutoCString ipString;
937916
rv = NormalizeIPv4(encHost, ipString);
938-
>>>>>>> bc78b98043438d8ee2727a483b6e10dedfda883f
939917
if (NS_FAILED(rv)) {
940918
return rv;
941919
}
@@ -2210,18 +2188,8 @@ nsresult nsStandardURL::SetHost(const nsACString& input) {
22102188

22112189
FindHostLimit(start, end);
22122190

2213-
<<<<<<< HEAD
2214-
// Do percent decoding on the the input.
2215-
nsAutoCString flat;
2216-
NS_UnescapeURL(hostname.BeginReading(), end - start,
2217-
hostname.Taint(),
2218-
esc_AlwaysCopy | esc_Host, flat);
2219-
const char* host = flat.get();
2220-
2221-
LOG(("nsStandardURL::SetHost [host=%s]\n", host));
2222-
=======
22232191
nsDependentCSubstring flat(start, end);
2224-
>>>>>>> bc78b98043438d8ee2727a483b6e10dedfda883f
2192+
flat.AssignTaint(hostname.Taint());
22252193

22262194
if (mURLType == URLTYPE_NO_AUTHORITY) {
22272195
if (flat.IsEmpty()) {
@@ -2294,11 +2262,7 @@ nsresult nsStandardURL::SetHost(const nsACString& input) {
22942262
}
22952263
}
22962264

2297-
<<<<<<< HEAD
2298-
int32_t shift = ReplaceSegment(mHost.mPos, mHost.mLen, host, len, hostBuf.Taint());
2299-
=======
2300-
int32_t shift = ReplaceSegment(mHost.mPos, mHost.mLen, hostBuf.get(), len);
2301-
>>>>>>> bc78b98043438d8ee2727a483b6e10dedfda883f
2265+
int32_t shift = ReplaceSegment(mHost.mPos, mHost.mLen, hostBuf.get(), len, hostBuf.Taint());
23022266

23032267
if (shift) {
23042268
mHost.mLen = len;

0 commit comments

Comments
 (0)