Fix UB when comparing two empty webrtc::Buffer objects

operator== invoked std::memcmp(nullptr, nullptr, 0) when both buffers
were empty, which is undefined behavior and triggers a ubsan crash. Fix
the issue by returning early if both buffers have size 0.

Bug: webrtc:42224551
Change-Id: I073171f57640e20115361146ebbe89e1781be0af
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/472020
Commit-Queue: Joachim Reiersen <joachimr@meta.com>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#47694}
diff --git a/rtc_base/buffer.h b/rtc_base/buffer.h
index 88b2ff7..4d0deaa 100644
--- a/rtc_base/buffer.h
+++ b/rtc_base/buffer.h
@@ -198,6 +198,9 @@
     if (size_ != buf.size_) {
       return false;
     }
+    if (size_ == 0) {
+      return true;
+    }
     if (std::is_integral<T>::value) {
       // Optimization.
       return std::memcmp(data_.get(), buf.data_.get(), size_ * sizeof(T)) == 0;
diff --git a/rtc_base/buffer_unittest.cc b/rtc_base/buffer_unittest.cc
index 4c22667..872cf7a 100644
--- a/rtc_base/buffer_unittest.cc
+++ b/rtc_base/buffer_unittest.cc
@@ -57,6 +57,12 @@
   TestBuf(Buffer(kTestData.data(), 0, 20), 0, 20);
 }
 
+TEST(BufferTest, TestEmptyBuffersAreEqual) {
+  Buffer buf1;
+  Buffer buf2;
+  EXPECT_EQ(buf1, buf2);
+}
+
 TEST(BufferTest, TestConstructData) {
   Buffer buf(kTestData.data(), 7);
   EXPECT_EQ(buf.size(), 7u);