From 1ad472f5009d0751a352299e54bf375ea0e65ba3 Mon Sep 17 00:00:00 2001 From: ponces Date: Sat, 24 Sep 2022 02:31:07 +0100 Subject: [PATCH 1/5] fix: Add basic_string inline templates to fix args segmentation fault --- patches/aapt2.patch | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/patches/aapt2.patch b/patches/aapt2.patch index 6328257..0bf6295 100644 --- a/patches/aapt2.patch +++ b/patches/aapt2.patch @@ -12,6 +12,49 @@ index cae2d0bc16b3..13c5f8fc84e8 100644 #include #endif +diff --git a/src/base/libs/androidfw/include/androidfw/StringPiece.h b/src/base/libs/androidfw/include/androidfw/StringPiece.h +index 921877dc4982..27e27e1c2b94 100644 +--- a/src/base/libs/androidfw/include/androidfw/StringPiece.h ++++ b/src/base/libs/androidfw/include/androidfw/StringPiece.h +@@ -75,6 +75,11 @@ class BasicStringPiece { + bool operator>(const BasicStringPiece& rhs) const; + bool operator==(const BasicStringPiece& rhs) const; + bool operator!=(const BasicStringPiece& rhs) const; ++ // for std::basic_string ++ bool operator<(const std::basic_string& rhs) const; ++ bool operator>(const std::basic_string& rhs) const; ++ bool operator==(const std::basic_string& rhs) const; ++ bool operator!=(const std::basic_string& rhs) const; + + const_iterator begin() const; + const_iterator end() const; +@@ -256,6 +261,26 @@ inline bool BasicStringPiece::operator!=(const BasicStringPiece& r + return compare(rhs) != 0; + } + ++template ++inline bool BasicStringPiece::operator<(const std::basic_string& rhs) const { ++ return compare(BasicStringPiece(rhs)) < 0; ++} ++ ++template ++inline bool BasicStringPiece::operator>(const std::basic_string& rhs) const { ++ return compare(BasicStringPiece(rhs)) > 0; ++} ++ ++template ++inline bool BasicStringPiece::operator==(const std::basic_string& rhs) const { ++ return compare(BasicStringPiece(rhs)) == 0; ++} ++ ++template ++inline bool BasicStringPiece::operator!=(const std::basic_string& rhs) const{ ++ return compare(BasicStringPiece(rhs)) != 0; ++} ++ + template + inline typename BasicStringPiece::const_iterator BasicStringPiece::begin() const { + return data_; diff --git a/src/base/tools/aapt2/ResourceTable.cpp b/src/base/tools/aapt2/ResourceTable.cpp index 8ab1493c6ab3..3a855f0f6866 100644 --- a/src/base/tools/aapt2/ResourceTable.cpp From 352ee824001a116976b8e189558e850fc09c021b Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Sat, 24 Sep 2022 14:50:53 +0200 Subject: [PATCH 2/5] refactor: split patches to separate files --- patches/aapt2.patch | 45 +------------------------------------ patches/androidfw.patch | 50 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 44 deletions(-) create mode 100644 patches/androidfw.patch diff --git a/patches/aapt2.patch b/patches/aapt2.patch index 0bf6295..f884571 100644 --- a/patches/aapt2.patch +++ b/patches/aapt2.patch @@ -12,49 +12,6 @@ index cae2d0bc16b3..13c5f8fc84e8 100644 #include #endif -diff --git a/src/base/libs/androidfw/include/androidfw/StringPiece.h b/src/base/libs/androidfw/include/androidfw/StringPiece.h -index 921877dc4982..27e27e1c2b94 100644 ---- a/src/base/libs/androidfw/include/androidfw/StringPiece.h -+++ b/src/base/libs/androidfw/include/androidfw/StringPiece.h -@@ -75,6 +75,11 @@ class BasicStringPiece { - bool operator>(const BasicStringPiece& rhs) const; - bool operator==(const BasicStringPiece& rhs) const; - bool operator!=(const BasicStringPiece& rhs) const; -+ // for std::basic_string -+ bool operator<(const std::basic_string& rhs) const; -+ bool operator>(const std::basic_string& rhs) const; -+ bool operator==(const std::basic_string& rhs) const; -+ bool operator!=(const std::basic_string& rhs) const; - - const_iterator begin() const; - const_iterator end() const; -@@ -256,6 +261,26 @@ inline bool BasicStringPiece::operator!=(const BasicStringPiece& r - return compare(rhs) != 0; - } - -+template -+inline bool BasicStringPiece::operator<(const std::basic_string& rhs) const { -+ return compare(BasicStringPiece(rhs)) < 0; -+} -+ -+template -+inline bool BasicStringPiece::operator>(const std::basic_string& rhs) const { -+ return compare(BasicStringPiece(rhs)) > 0; -+} -+ -+template -+inline bool BasicStringPiece::operator==(const std::basic_string& rhs) const { -+ return compare(BasicStringPiece(rhs)) == 0; -+} -+ -+template -+inline bool BasicStringPiece::operator!=(const std::basic_string& rhs) const{ -+ return compare(BasicStringPiece(rhs)) != 0; -+} -+ - template - inline typename BasicStringPiece::const_iterator BasicStringPiece::begin() const { - return data_; diff --git a/src/base/tools/aapt2/ResourceTable.cpp b/src/base/tools/aapt2/ResourceTable.cpp index 8ab1493c6ab3..3a855f0f6866 100644 --- a/src/base/tools/aapt2/ResourceTable.cpp @@ -227,4 +184,4 @@ index d7a8e6fe6ada..74457add2e6b 100644 + return android::base::StringPrintf("%s.%s", sMajorVersion, sMinorVersion); } - static size_t ConsumeDigits(const char* start, const char* end) { + static size_t ConsumeDigits(const char* start, const char* end) { \ No newline at end of file diff --git a/patches/androidfw.patch b/patches/androidfw.patch new file mode 100644 index 0000000..eed7373 --- /dev/null +++ b/patches/androidfw.patch @@ -0,0 +1,50 @@ +--- a/base/libs/androidfw/include/androidfw/StringPiece.h 2022-09-24 10:22:22.808291321 +0800 ++++ b/base/libs/androidfw/include/androidfw/StringPiece.h 2022-09-24 10:20:04.808277573 +0800 +@@ -68,13 +68,19 @@ + size_t size() const; + bool empty() const; + std::basic_string to_string() const; ++ + bool contains(const BasicStringPiece& rhs) const; + int compare(const BasicStringPiece& rhs) const; + bool operator<(const BasicStringPiece& rhs) const; + bool operator>(const BasicStringPiece& rhs) const; + bool operator==(const BasicStringPiece& rhs) const; + bool operator!=(const BasicStringPiece& rhs) const; +- ++ // for std::basic_string ++ bool operator<(const std::basic_string& rhs) const; ++ bool operator>(const std::basic_string& rhs) const; ++ bool operator==(const std::basic_string& rhs) const; ++ bool operator!=(const std::basic_string& rhs) const; ++ + const_iterator begin() const; + const_iterator end() const; + +@@ -256,6 +262,26 @@ + } + ++ template ++inline bool BasicStringPiece::operator<(const std::basic_string& rhs) const { ++ return compare(BasicStringPiece(rhs)) < 0; ++} ++ ++template ++inline bool BasicStringPiece::operator>(const std::basic_string& rhs) const { ++ return compare(BasicStringPiece(rhs)) > 0; ++} ++ ++template ++inline bool BasicStringPiece::operator==(const std::basic_string& rhs) const { ++ return compare(BasicStringPiece(rhs)) == 0; ++} ++ ++template ++inline bool BasicStringPiece::operator!=(const std::basic_string& rhs) const{ ++ return compare(BasicStringPiece(rhs)) != 0; ++} ++ +template + inline typename BasicStringPiece::const_iterator BasicStringPiece::begin() const { + return data_; + } \ No newline at end of file From 0f54c42919a3fd0e57106875d2fb2a34ab732987 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Sat, 24 Sep 2022 16:01:18 +0200 Subject: [PATCH 3/5] fix(build): add missing patch --- build.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build.sh b/build.sh index 0754156..2139d37 100755 --- a/build.sh +++ b/build.sh @@ -35,6 +35,7 @@ git apply patches/libpng.patch --whitespace=fix git apply patches/selinux.patch --whitespace=fix git apply patches/protobuf.patch --whitespace=fix git apply patches/aapt2.patch --whitespace=fix +git apply patches/androidfw.patch --whitespace=fix git apply patches/boringssl.patch --whitespace=fix # Define all the compilers, libraries and targets. @@ -97,4 +98,4 @@ ninja || exit 1 mkdir -p "$bin_directory" # Move aapt2 to bin directory. -mv "$aapt_binary_path" "$bin_directory" \ No newline at end of file +mv "$aapt_binary_path" "$bin_directory" From e7e682a13236535cb23144dbaba6e7e92c8e5526 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Sat, 24 Sep 2022 16:09:58 +0200 Subject: [PATCH 4/5] refactor: move patches to appropriate file [skip-ci] --- patches/aapt2.patch | 13 ------------- patches/androidfw.patch | 43 ++++++++++++++++++++++++----------------- 2 files changed, 25 insertions(+), 31 deletions(-) diff --git a/patches/aapt2.patch b/patches/aapt2.patch index f884571..a9e3452 100644 --- a/patches/aapt2.patch +++ b/patches/aapt2.patch @@ -1,17 +1,4 @@ Submodule src/base contains modified content -diff --git a/src/base/libs/androidfw/ResourceTypes.cpp b/src/base/libs/androidfw/ResourceTypes.cpp -index cae2d0bc16b3..13c5f8fc84e8 100644 ---- a/src/base/libs/androidfw/ResourceTypes.cpp -+++ b/src/base/libs/androidfw/ResourceTypes.cpp -@@ -43,7 +43,7 @@ - #include - #include - --#ifdef __ANDROID__ -+#if 0 - #include - - #endif diff --git a/src/base/tools/aapt2/ResourceTable.cpp b/src/base/tools/aapt2/ResourceTable.cpp index 8ab1493c6ab3..3a855f0f6866 100644 --- a/src/base/tools/aapt2/ResourceTable.cpp diff --git a/patches/androidfw.patch b/patches/androidfw.patch index eed7373..4f99cc5 100644 --- a/patches/androidfw.patch +++ b/patches/androidfw.patch @@ -1,30 +1,38 @@ ---- a/base/libs/androidfw/include/androidfw/StringPiece.h 2022-09-24 10:22:22.808291321 +0800 -+++ b/base/libs/androidfw/include/androidfw/StringPiece.h 2022-09-24 10:20:04.808277573 +0800 -@@ -68,13 +68,19 @@ - size_t size() const; - bool empty() const; - std::basic_string to_string() const; -+ - bool contains(const BasicStringPiece& rhs) const; - int compare(const BasicStringPiece& rhs) const; - bool operator<(const BasicStringPiece& rhs) const; +Submodule src/base contains modified content +diff --git a/src/base/libs/androidfw/ResourceTypes.cpp b/src/base/libs/androidfw/ResourceTypes.cpp +index cae2d0bc16b3..13c5f8fc84e8 100644 +--- a/src/base/libs/androidfw/ResourceTypes.cpp ++++ b/src/base/libs/androidfw/ResourceTypes.cpp +@@ -43,7 +43,7 @@ + #include + #include + +-#ifdef __ANDROID__ ++#if 0 + #include + + #endif +diff --git a/src/base/libs/androidfw/include/androidfw/StringPiece.h b/src/base/libs/androidfw/include/androidfw/StringPiece.h +index 921877dc4982..27e27e1c2b94 100644 +--- a/src/base/libs/androidfw/include/androidfw/StringPiece.h ++++ b/src/base/libs/androidfw/include/androidfw/StringPiece.h +@@ -75,6 +75,11 @@ class BasicStringPiece { bool operator>(const BasicStringPiece& rhs) const; bool operator==(const BasicStringPiece& rhs) const; bool operator!=(const BasicStringPiece& rhs) const; -- + // for std::basic_string + bool operator<(const std::basic_string& rhs) const; + bool operator>(const std::basic_string& rhs) const; + bool operator==(const std::basic_string& rhs) const; + bool operator!=(const std::basic_string& rhs) const; -+ + const_iterator begin() const; const_iterator end() const; - -@@ -256,6 +262,26 @@ +@@ -256,6 +261,26 @@ inline bool BasicStringPiece::operator!=(const BasicStringPiece& r + return compare(rhs) != 0; } -+ template ++template +inline bool BasicStringPiece::operator<(const std::basic_string& rhs) const { + return compare(BasicStringPiece(rhs)) < 0; +} @@ -44,7 +52,6 @@ + return compare(BasicStringPiece(rhs)) != 0; +} + -template + template inline typename BasicStringPiece::const_iterator BasicStringPiece::begin() const { - return data_; - } \ No newline at end of file + return data_; \ No newline at end of file From 93324ca91e4fda47c96e314c4fcb0c01525f489b Mon Sep 17 00:00:00 2001 From: Alberto Ponces Date: Sun, 25 Sep 2022 20:29:20 +0100 Subject: [PATCH 5/5] fix: Add ending newlines to fix corrupt aapt2 and androidfw patches --- patches/aapt2.patch | 2 +- patches/androidfw.patch | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/patches/aapt2.patch b/patches/aapt2.patch index a9e3452..8803cef 100644 --- a/patches/aapt2.patch +++ b/patches/aapt2.patch @@ -171,4 +171,4 @@ index d7a8e6fe6ada..74457add2e6b 100644 + return android::base::StringPrintf("%s.%s", sMajorVersion, sMinorVersion); } - static size_t ConsumeDigits(const char* start, const char* end) { \ No newline at end of file + static size_t ConsumeDigits(const char* start, const char* end) { diff --git a/patches/androidfw.patch b/patches/androidfw.patch index 4f99cc5..9eae957 100644 --- a/patches/androidfw.patch +++ b/patches/androidfw.patch @@ -54,4 +54,4 @@ index 921877dc4982..27e27e1c2b94 100644 + template inline typename BasicStringPiece::const_iterator BasicStringPiece::begin() const { - return data_; \ No newline at end of file + return data_;