summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwangxianzhu <wangxianzhu@chromium.org>2015-12-01 17:42:12 -0800
committerCommit bot <commit-bot@chromium.org>2015-12-02 01:43:30 +0000
commit643cfab725fc4e56615a3d2ff7cf2eec9d86b079 (patch)
tree75cf610b7e0be172d4235b970f162480fd6b9c78
parent17f5004b2cf85d8a7f20f3177953569d4d57ef7d (diff)
downloadchromium_src-643cfab725fc4e56615a3d2ff7cf2eec9d86b079.zip
chromium_src-643cfab725fc4e56615a3d2ff7cf2eec9d86b079.tar.gz
chromium_src-643cfab725fc4e56615a3d2ff7cf2eec9d86b079.tar.bz2
Fix buffer overflow in trace_event_android.cc
BUG=552558 TEST=TraceEventAndroidTest.WriteToATrace Review URL: https://codereview.chromium.org/1490763006 Cr-Commit-Position: refs/heads/master@{#362574}
-rw-r--r--base/trace_event/BUILD.gn4
-rw-r--r--base/trace_event/trace_event.gypi5
-rw-r--r--base/trace_event/trace_event_android.cc2
-rw-r--r--base/trace_event/trace_event_android_unittest.cc22
4 files changed, 32 insertions, 1 deletions
diff --git a/base/trace_event/BUILD.gn b/base/trace_event/BUILD.gn
index aae6adb..85c26e2 100644
--- a/base/trace_event/BUILD.gn
+++ b/base/trace_event/BUILD.gn
@@ -135,6 +135,10 @@ source_set("trace_event_unittests") {
sources += [ "process_memory_maps_dump_provider_unittest.cc" ]
}
+ if (is_android) {
+ sources += [ "trace_event_android_unittest.cc" ]
+ }
+
deps = [
"//base/test:test_support",
"//testing/gmock",
diff --git a/base/trace_event/trace_event.gypi b/base/trace_event/trace_event.gypi
index 0c43ae1..8656c6e 100644
--- a/base/trace_event/trace_event.gypi
+++ b/base/trace_event/trace_event.gypi
@@ -101,6 +101,11 @@
'trace_event/process_memory_maps_dump_provider_unittest.cc',
],
}],
+ ['OS == "android"', {
+ 'trace_event_test_sources' : [
+ 'trace_event/trace_event_android_unittest.cc',
+ ],
+ }],
],
},
}
diff --git a/base/trace_event/trace_event_android.cc b/base/trace_event/trace_event_android.cc
index 4e578a5..01ca8e4 100644
--- a/base/trace_event/trace_event_android.cc
+++ b/base/trace_event/trace_event_android.cc
@@ -25,7 +25,7 @@ void WriteToATrace(int fd, const char* buffer, size_t size) {
size_t total_written = 0;
while (total_written < size) {
ssize_t written = HANDLE_EINTR(write(
- fd, buffer + size, size - total_written));
+ fd, buffer + total_written, size - total_written));
if (written <= 0)
break;
total_written += written;
diff --git a/base/trace_event/trace_event_android_unittest.cc b/base/trace_event/trace_event_android_unittest.cc
new file mode 100644
index 0000000..58bd77e
--- /dev/null
+++ b/base/trace_event/trace_event_android_unittest.cc
@@ -0,0 +1,22 @@
+// Copyright (c) 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/trace_event/trace_event.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace base {
+namespace trace_event {
+
+TEST(TraceEventAndroidTest, WriteToATrace) {
+ // Just a smoke test to ensure no crash.
+ TraceLog* trace_log = TraceLog::GetInstance();
+ trace_log->StartATrace();
+ TRACE_EVENT0("test", "test-event");
+ trace_log->StopATrace();
+ trace_log->AddClockSyncMetadataEvent();
+}
+
+} // namespace trace_event
+} // namespace base