Skip to content

Commit ae1d586

Browse files
authored
Merge pull request #301 from leeN/clang-plugin
Adding build with clang-plugin to CI
2 parents 428e00c + 79a6fd7 commit ae1d586

File tree

14 files changed

+235
-106
lines changed

14 files changed

+235
-106
lines changed

.github/workflows/clang-plugin.yml

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# Attempt to build the whole browser
2+
name: Build with clang-plugin
3+
4+
# Controls when the workflow will run
5+
on:
6+
# Triggers the workflow on push or pull request events but only for the main branch
7+
push:
8+
branches: [ main ]
9+
pull_request:
10+
branches: [ main ]
11+
12+
# Allows you to run this workflow manually from the Actions tab
13+
workflow_dispatch:
14+
15+
jobs:
16+
17+
# Test complete build on Ubuntu
18+
ubuntu-build-clang-plugin:
19+
runs-on: ubuntu-22.04
20+
21+
steps:
22+
- name: Free Disk Space (Ubuntu)
23+
uses: jlumbroso/free-disk-space@main
24+
with:
25+
tool-cache: true
26+
android: true
27+
dotnet: true
28+
haskell: true
29+
large-packages: true
30+
docker-images: true
31+
swap-storage: true
32+
33+
- name: Install Dependencies
34+
run: |
35+
df -h
36+
sudo apt-get update
37+
sudo apt-get install -y \
38+
curl \
39+
python3 \
40+
python3-pip \
41+
python3-venv \
42+
tar \
43+
zip \
44+
unzip \
45+
git
46+
sudo apt-get install -y --no-install-recommends ffmpeg libasound2 libatk1.0-0 libcairo-gobject2 libcairo2 libdbus-1-3 libdbus-glib-1-2 libfontconfig1 libfreetype6 libgdk-pixbuf-2.0-0 libglib2.0-0 libgtk-3-0 libpango-1.0-0 libpangocairo-1.0-0 libx11-6 libx11-xcb1 libxcb-shm0 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxtst6 xvfb fonts-noto-color-emoji fonts-unifont xfonts-cyrillic xfonts-scalable fonts-liberation fonts-ipafont-gothic fonts-wqy-zenhei fonts-tlwg-loma-otf fonts-freefont-ttf
47+
python3 -m pip install setuptools
48+
49+
- name: Checkout release branch
50+
uses: actions/checkout@v4
51+
with:
52+
fetch-depth: 1
53+
54+
- name: Dry Run
55+
run: |
56+
cp taintfox_mozconfig_ubuntu_clang_plugin .mozconfig
57+
bash build.sh -p -n
58+
59+
- name: Bootstrap
60+
run: |
61+
df -h
62+
bash build.sh -u -v
63+
64+
- name: Build
65+
run: |
66+
bash build.sh -s -v

dom/base/nsINode.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -990,7 +990,7 @@ void nsINode::Normalize() {
990990
"mutation events messed us up");
991991
if (!hasRemoveListeners || (target && target->NodeType() == TEXT_NODE)) {
992992
nsTextNode* t = static_cast<nsTextNode*>(target);
993-
SafeStringTaint taint = text->Taint();
993+
SafeStringTaint taint(text->Taint());
994994
if (text->Is2b()) {
995995
t->AppendTextForNormalize(text->Get2b(), text->GetLength(), taint, true,
996996
node);

dom/events/MessageEvent.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ void MessageEvent::GetData(JSContext* aCx, JS::MutableHandle<JS::Value> aData,
6565

6666
if (!JS_WrapValue(aCx, aData)) {
6767
aRv.Throw(NS_ERROR_FAILURE);
68+
return;
6869
}
6970

7071
// Foxhound: MessageEvent source

dom/html/HTMLScriptElement.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ void HTMLScriptElement::GetInnerHTML(nsAString& aInnerHTML,
165165
OOMReporter& aError) {
166166
if (!nsContentUtils::GetNodeTextContent(this, false, aInnerHTML, fallible)) {
167167
aError.ReportOOM();
168+
return;
168169
}
169170
// Foxhound: script.innerHTML source
170171
MarkTaintSourceElement(aInnerHTML, "script.innerHTML", this);

dom/tainting/nsTaintingUtils.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ static TaintOperation GetTaintOperation(JSContext *cx, const char* name)
6161
static TaintOperation GetTaintOperation(JSContext *cx, const char* name, const nsAString& arg)
6262
{
6363
if (cx && JS::CurrentGlobalOrNull(cx)) {
64-
JS::RootedValue argval(cx);
64+
JS::Rooted<JS::Value> argval(cx);
6565
if (mozilla::dom::ToJSValue(cx, arg, &argval)) {
6666
return JS_GetTaintOperationFullArgs(cx, name, argval);
6767
}
@@ -73,7 +73,7 @@ static TaintOperation GetTaintOperation(JSContext *cx, const char* name, const n
7373
static TaintOperation GetTaintOperation(JSContext *cx, const char* name, const nsTArray<nsString> &args)
7474
{
7575
if (cx && JS::CurrentGlobalOrNull(cx)) {
76-
JS::RootedValue argval(cx);
76+
JS::Rooted<JS::Value> argval(cx);
7777

7878
if (mozilla::dom::ToJSValue(cx, args, &argval)) {
7979
return JS_GetTaintOperationFullArgs(cx, name, argval);
@@ -86,7 +86,7 @@ static TaintOperation GetTaintOperation(JSContext *cx, const char* name, const n
8686
static TaintOperation GetTaintOperation(JSContext *cx, const char* name, const nsTArray<nsCString> &args)
8787
{
8888
if (cx && JS::CurrentGlobalOrNull(cx)) {
89-
JS::RootedValue argval(cx);
89+
JS::Rooted<JS::Value> argval(cx);
9090

9191
if (mozilla::dom::ToJSValue(cx, args, &argval)) {
9292
return JS_GetTaintOperationFullArgs(cx, name, argval);
@@ -445,11 +445,11 @@ nsresult ReportTaintSink(JSContext *cx, const nsAString &str, const char* name,
445445
return NS_OK;
446446
}
447447

448-
JS::RootedValue argval(cx);
448+
JS::Rooted<JS::Value> argval(cx);
449449
if (!mozilla::dom::ToJSValue(cx, arg, &argval))
450450
return NS_ERROR_FAILURE;
451451

452-
JS::RootedValue strval(cx);
452+
JS::Rooted<JS::Value> strval(cx);
453453
if (!mozilla::dom::ToJSValue(cx, str, &strval))
454454
return NS_ERROR_FAILURE;
455455

@@ -476,7 +476,7 @@ nsresult ReportTaintSink(JSContext *cx, const nsAString &str, const char* name)
476476
return NS_OK;
477477
}
478478

479-
JS::RootedValue strval(cx);
479+
JS::Rooted<JS::Value> strval(cx);
480480
if (!mozilla::dom::ToJSValue(cx, str, &strval)) {
481481
return NS_ERROR_FAILURE;
482482
}
@@ -504,7 +504,7 @@ nsresult ReportTaintSink(JSContext *cx, const nsACString &str, const char* name)
504504
return NS_OK;
505505
}
506506

507-
JS::RootedValue strval(cx);
507+
JS::Rooted<JS::Value> strval(cx);
508508
if (!mozilla::dom::ToJSValue(cx, str, &strval)) {
509509
return NS_ERROR_FAILURE;
510510
}

dom/url/URLSearchParams.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ void URLSearchParams::Serialize(nsACString& aValue) const {
157157
void URLSearchParams::Stringify(nsAString& aValue) const {
158158
nsAutoCString serialized;
159159
mParams->Serialize(serialized, true);
160-
SafeStringTaint taint = serialized.Taint();
160+
SafeStringTaint taint(serialized.Taint());
161161
CopyUTF8toUTF16(serialized, aValue);
162162
aValue.AssignTaint(taint);
163163
}

js/src/builtin/String.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -677,7 +677,7 @@ static bool str_unescape(JSContext* cx, unsigned argc, Value* vp) {
677677
}
678678

679679
// Save operation to avoid GC issues
680-
SafeStringTaint taint = str->taint();
680+
SafeStringTaint taint(str->taint());
681681
TaintOperation op = TaintOperationFromContext(cx, "unescape", true, str);
682682

683683
// Steps 2, 4-5.
@@ -1216,7 +1216,7 @@ static JSString* ToLowerCase(JSContext* cx, JSLinearString* str) {
12161216

12171217
InlineCharBuffer<CharT> newChars;
12181218
// Foxhound: cache the taint up here to prevent GC issues
1219-
SafeStringTaint taint = str->taint();
1219+
SafeStringTaint taint(str->taint());
12201220
if (taint.hasTaint()) {
12211221
taint.extend(TaintOperationFromContextJSString(cx, "toLowerCase", true, str));
12221222
}
@@ -1630,7 +1630,7 @@ static JSString* ToUpperCase(JSContext* cx, JSLinearString* str) {
16301630
using TwoByteBuffer = InlineCharBuffer<char16_t>;
16311631

16321632
mozilla::MaybeOneOf<Latin1Buffer, TwoByteBuffer> newChars;
1633-
SafeStringTaint taint = str->taint();
1633+
SafeStringTaint taint(str->taint());
16341634
if (taint.hasTaint()) {
16351635
taint.extend(TaintOperationFromContextJSString(cx, "toUpperCase", true, str));
16361636
}
@@ -5100,7 +5100,7 @@ static MOZ_ALWAYS_INLINE bool Encode(JSContext* cx, Handle<JSLinearString*> str,
51005100
}
51015101

51025102
// Foxhound: Add encode operation to output taint.
5103-
SafeStringTaint taint = sb.empty() ? str->taint() : sb.taint();
5103+
SafeStringTaint taint(sb.empty() ? str->taint() : sb.taint());
51045104
if(taint.hasTaint()) {
51055105
if (unescapedSet == js_isUriReservedPlusPound) {
51065106
taint.extend(TaintOperationFromContext(cx, "encodeURI", true, str));
@@ -5266,7 +5266,7 @@ static bool Decode(JSContext* cx, Handle<JSLinearString*> str,
52665266
}
52675267

52685268
// Foxhound: Add decode operation to output taint.
5269-
SafeStringTaint taint = sb.empty() ? str->taint() : sb.taint();
5269+
SafeStringTaint taint(sb.empty() ? str->taint() : sb.taint());
52705270
if(taint.hasTaint()) {
52715271
if(reservedSet == js_isUriReservedPlusPound) {
52725272
taint.extend(TaintOperationFromContext(cx, "decodeURI", true, str));

js/src/shell/js.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1673,7 +1673,7 @@ static bool AddIntlExtras(JSContext* cx, unsigned argc, Value* vp) {
16731673

16741674
static bool
16751675
PrintTaintedString(JSContext* cx, RootedValue *result) {
1676-
SafeStringTaint taint = result->toString()->taint();
1676+
SafeStringTaint taint(result->toString()->taint());
16771677

16781678
RootedString str(cx);
16791679
str = JS_ValueToSource(cx, *result);

js/src/vm/Compartment.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ JSString* js::CopyStringPure(JSContext* cx, JSString* str) {
107107

108108
size_t len = str->length();
109109
// Foxhound: Copy taint up here to avoid GC problems later
110-
SafeStringTaint taint = str->Taint();
110+
SafeStringTaint taint(str->Taint());
111111
JSString* copy;
112112
if (str->isLinear()) {
113113
// If the string has a refcounted StringBuffer, we can share it.

js/src/vm/SelfHosting.cpp

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1781,10 +1781,12 @@ taint_addTaintOperation(JSContext* cx, unsigned argc, Value* vp)
17811781
if (!argStr) {
17821782
taint_args.push_back(taintarg(cx, u""));
17831783
} else {
1784-
taint_args.push_back(taintarg(cx, RootedString(cx, argStr)));
1784+
RootedString rs(cx, argStr);
1785+
taint_args.push_back(taintarg(cx, rs));
17851786
}
17861787
} else {
1787-
taint_args.push_back(taintarg(cx, RootedString(cx, argStr)));
1788+
RootedString rs(cx, argStr);
1789+
taint_args.push_back(taintarg(cx, rs));
17881790
}
17891791
}
17901792

@@ -1829,10 +1831,12 @@ taint_addTaintOperation_native_full(JSContext* cx, unsigned argc, Value* vp)
18291831
if (!argStr) {
18301832
taint_args.push_back(taintarg(cx, u""));
18311833
} else {
1832-
taint_args.push_back(taintarg_full(cx, RootedString(cx, argStr)));
1834+
RootedString rs(cx, argStr);
1835+
taint_args.push_back(taintarg_full(cx, rs));
18331836
}
18341837
} else {
1835-
taint_args.push_back(taintarg_full(cx, RootedString(cx, argStr)));
1838+
RootedString rs(cx, argStr);
1839+
taint_args.push_back(taintarg_full(cx, rs));
18361840
}
18371841
}
18381842

@@ -1877,10 +1881,12 @@ taint_addTaintOperation_native(JSContext* cx, unsigned argc, Value* vp)
18771881
if (!argStr) {
18781882
taint_args.push_back(taintarg(cx, u""));
18791883
} else {
1880-
taint_args.push_back(taintarg(cx, RootedString(cx, argStr)));
1884+
RootedString rs(cx, argStr);
1885+
taint_args.push_back(taintarg(cx, rs));
18811886
}
18821887
} else {
1883-
taint_args.push_back(taintarg(cx, RootedString(cx, argStr)));
1888+
RootedString rs(cx, argStr);
1889+
taint_args.push_back(taintarg(cx, rs));
18841890
}
18851891
}
18861892

0 commit comments

Comments
 (0)