Fix SegmentedByteString substring write (#778)

* Write unit tests to expose bug

* Fix SegmentedByteString substring write
diff --git a/okio/src/commonMain/kotlin/okio/internal/SegmentedByteString.kt b/okio/src/commonMain/kotlin/okio/internal/SegmentedByteString.kt
index a1b2d81..c2e39ba 100644
--- a/okio/src/commonMain/kotlin/okio/internal/SegmentedByteString.kt
+++ b/okio/src/commonMain/kotlin/okio/internal/SegmentedByteString.kt
@@ -158,7 +158,7 @@
       buffer.head!!.prev!!.push(segment)
     }
   }
-  buffer.size += size
+  buffer.size += byteCount
 }
 
 internal inline fun SegmentedByteString.commonRangeEquals(
diff --git a/okio/src/commonTest/kotlin/okio/BufferedSinkTest.kt b/okio/src/commonTest/kotlin/okio/BufferedSinkTest.kt
index 8563edc..7095bf2 100644
--- a/okio/src/commonTest/kotlin/okio/BufferedSinkTest.kt
+++ b/okio/src/commonTest/kotlin/okio/BufferedSinkTest.kt
@@ -129,6 +129,18 @@
     assertEquals("72616ec999".decodeHex(), data.readByteString())
   }
 
+  @Test fun writeSegmentedByteString() {
+    sink.write(Buffer().write("təˈranəˌsôr".encodeUtf8()).snapshot())
+    sink.flush()
+    assertEquals("74c999cb8872616ec999cb8c73c3b472".decodeHex(), data.readByteString())
+  }
+
+  @Test fun writeSegmentedByteStringOffset() {
+    sink.write(Buffer().write("təˈranəˌsôr".encodeUtf8()).snapshot(), 5, 5)
+    sink.flush()
+    assertEquals("72616ec999".decodeHex(), data.readByteString())
+  }
+
   @Test fun writeStringUtf8() {
     sink.writeUtf8("təˈranəˌsôr")
     sink.flush()
diff --git a/okio/src/jvmTest/java/okio/BufferedSinkTest.java b/okio/src/jvmTest/java/okio/BufferedSinkTest.java
index 0e3bd6e..e013284 100644
--- a/okio/src/jvmTest/java/okio/BufferedSinkTest.java
+++ b/okio/src/jvmTest/java/okio/BufferedSinkTest.java
@@ -177,6 +177,18 @@
     assertEquals(ByteString.decodeHex("72616ec999"), data.readByteString());
   }
 
+  @Test public void writeSegmentedByteString() throws IOException {
+    sink.write(new Buffer().write(ByteString.encodeUtf8("təˈranəˌsôr")).snapshot());
+    sink.flush();
+    assertEquals(ByteString.decodeHex("74c999cb8872616ec999cb8c73c3b472"), data.readByteString());
+  }
+
+  @Test public void writeSegmentedByteStringOffset() throws IOException {
+    sink.write(new Buffer().write(ByteString.encodeUtf8("təˈranəˌsôr")).snapshot(), 5, 5);
+    sink.flush();
+    assertEquals(ByteString.decodeHex("72616ec999"), data.readByteString());
+  }
+
   @Test public void writeStringUtf8() throws IOException {
     sink.writeUtf8("təˈranəˌsôr");
     sink.flush();