Skip to content

Commit 8ed4c58

Browse files
committed
Fix: wrong encoding of payloads smaller than 28 bytes
1 parent d4bcc00 commit 8ed4c58

3 files changed

Lines changed: 13 additions & 12 deletions

File tree

android/tinySSB/app/src/main/java/nz/scuttlebutt/tremolavossbol/WebAppInterface.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class WebAppInterface(val act: MainActivity, val webView: WebView) {
5959
val r = act.tinyRepo.fid2replica(fid)
6060
if(r == null)
6161
break
62-
val payload = r.read(i)
62+
val payload = r.read_content(i)
6363
val mid = r.get_mid(i)
6464
if (payload == null || mid == null) break
6565
Log.d("restream", "${i}, ${payload.size} Bytes")

android/tinySSB/app/src/main/java/nz/scuttlebutt/tremolavossbol/tssb/Replica.kt

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ class Replica(val context: MainActivity, val datapath: File, val fid: ByteArray)
186186
context.tinyDemux.arm_dmx(new_dmx, fct, fid)
187187

188188
if(sendToFront)
189-
context.wai.sendTinyEventToFrontend(fid, seq, (nam + pkt).sha256().sliceArray(0 until HASH_LEN), read(seq)!!)
189+
context.wai.sendTinyEventToFrontend(fid, seq, (nam + pkt).sha256().sliceArray(0 until HASH_LEN), read_content(seq)!!)
190190
return true
191191
}
192192

@@ -212,7 +212,7 @@ class Replica(val context: MainActivity, val datapath: File, val fid: ByteArray)
212212
}
213213
if (pend.rem <= 1) { //sidechain is complete
214214
state.pend_sc.remove(seq)
215-
val content = read(seq)
215+
val content = read_content(seq)
216216
val message_id = get_mid(seq)
217217
if (message_id != null && content != null) {
218218
context.wai.sendTinyEventToFrontend(fid, seq, message_id, content)
@@ -329,7 +329,8 @@ class Replica(val context: MainActivity, val datapath: File, val fid: ByteArray)
329329
}
330330
}
331331

332-
fun read(seq: Int): ByteArray? {
332+
333+
fun read_content(seq: Int): ByteArray? {
333334
if (state.max_seq < seq || seq < 1)
334335
return null
335336
var pos = log.length()
@@ -346,9 +347,13 @@ class Replica(val context: MainActivity, val datapath: File, val fid: ByteArray)
346347
if (pkt[7].toInt() == PKTTYPE_plain48)
347348
return pkt.sliceArray(8 until 56)
348349
if (pkt[7].toInt() == PKTTYPE_chain20) { //read whole sidechain
349-
val (chain_len, sz) = Bipf.varint_decode(pkt, DMX_LEN + 1, DMX_LEN + 4)
350+
val (content_len, sz) = Bipf.varint_decode(pkt, DMX_LEN + 1, DMX_LEN + 4)
351+
Log.d("DEBUGLEN", "len: $content_len, sz: $sz")
352+
if (content_len <= (28-sz)) {
353+
return pkt.sliceArray(8+sz until 8+sz+content_len)
354+
}
350355
var content = pkt.sliceArray(8 + sz until 36)
351-
var blocks = (chain_len - content.size + 99) / 100
356+
var blocks = (content_len - content.size + 99) / 100
352357
while (blocks > 0) {
353358
f.read(pkt)
354359
content += pkt.sliceArray(0 until 100)
@@ -397,7 +402,7 @@ class Replica(val context: MainActivity, val datapath: File, val fid: ByteArray)
397402
val chunks = ArrayList<ByteArray>()
398403
val seq = state.max_seq + 1
399404
val sz = Bipf.varint_encode(content.size)
400-
var payload = sz + content.sliceArray(0 until min(28 - sz.size, content.size - 1))
405+
var payload = sz + content.sliceArray(0 until min(28 - sz.size, content.size))
401406
if (payload.size < 28) { //TODO: compare with simplepub code l. 260
402407
payload += ByteArray(28 - payload.size)
403408
}

android/tinySSB/app/src/main/java/nz/scuttlebutt/tremolavossbol/tssb/Repo.kt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package nz.scuttlebutt.tremolavossbol.tssb
22

3-
import android.content.Context
43
import android.content.Context.MODE_PRIVATE
5-
import android.util.Log
64
import nz.scuttlebutt.tremolavossbol.MainActivity
75
import nz.scuttlebutt.tremolavossbol.crypto.SodiumAPI.Companion.sha256
86
import nz.scuttlebutt.tremolavossbol.utils.Bipf
@@ -14,12 +12,10 @@ import nz.scuttlebutt.tremolavossbol.utils.HelperFunctions.Companion.decodeHex
1412
import nz.scuttlebutt.tremolavossbol.utils.HelperFunctions.Companion.toBase64
1513
import nz.scuttlebutt.tremolavossbol.utils.HelperFunctions.Companion.toByteArray
1614
import nz.scuttlebutt.tremolavossbol.utils.HelperFunctions.Companion.toHex
17-
import nz.scuttlebutt.tremolavossbol.utils.HelperFunctions.Companion.toInt32
1815
import java.io.File
1916
import java.io.RandomAccessFile
2017
import java.nio.file.Files
2118
import java.nio.file.StandardCopyOption
22-
import kotlin.math.log
2319
import kotlin.random.Random
2420

2521
class Repo(val context: MainActivity) {
@@ -222,7 +218,7 @@ class Repo(val context: MainActivity) {
222218
}
223219

224220
fun feed_read_content(fid: ByteArray, seq: Int): ByteArray? {
225-
return fid2replica(fid)?.read(seq)
221+
return fid2replica(fid)?.read_content(seq)
226222
}
227223

228224
/**

0 commit comments

Comments
 (0)