Skip to content

Commit ceea374

Browse files
authored
Merge pull request #5 from kafeijao/fix/wrong-index-incrementing-while-parsing-strings
Fixed wrong index incrementing while parsing strings
2 parents 1dffab4 + 0944ea9 commit ceea374

File tree

4 files changed

+43
-5
lines changed

4 files changed

+43
-5
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
Address: /test/strings,
3+
Arguments: [
4+
,
5+
1,
6+
12,
7+
123,
8+
1234,
9+
12345,
10+
1234,
11+
123,
12+
12,
13+
1,
14+
15+
]
16+
}

CoreOSC.Tests/ParseTest.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,27 @@ public async Task TestNoAddress()
7373

7474
await Verify(msg2);
7575
}
76+
77+
[Test]
78+
public async Task TestStringPadding()
79+
{
80+
var msg = new OscMessage(
81+
"/test/strings",
82+
"",
83+
"1",
84+
"12",
85+
"123",
86+
"1234",
87+
"12345",
88+
"1234",
89+
"123",
90+
"12",
91+
"1",
92+
"");
93+
var bytes = msg.GetBytes();
94+
95+
var msg2 = OscMessage.ParseMessage(bytes);
96+
97+
await Verify(msg2);
98+
}
7699
}

CoreOSC/OscMessage.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -217,9 +217,8 @@ public static OscMessage ParseMessage(Span<byte> msg)
217217
break;
218218

219219
case 's':
220-
var stringVal = OscPacketUtils.GetString(msgReadOnlySpan, index);
220+
var stringVal = OscPacketUtils.GetString(msgReadOnlySpan, index, out index);
221221
arguments.Add(stringVal);
222-
index += Encoding.UTF8.GetBytes(stringVal).Length;
223222
break;
224223

225224
case 'b':
@@ -247,9 +246,8 @@ public static OscMessage ParseMessage(Span<byte> msg)
247246
break;
248247

249248
case 'S':
250-
var symbolVal = OscPacketUtils.GetString(msgReadOnlySpan, index);
249+
var symbolVal = OscPacketUtils.GetString(msgReadOnlySpan, index, out index);
251250
arguments.Add(new Symbol(symbolVal));
252-
index += symbolVal.Length;
253251
break;
254252

255253
case 'c':

CoreOSC/OscPacketUtils.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,13 @@ public static int GetInt(ReadOnlySpan<byte> msg, int index) =>
3939

4040
public static float GetFloat(Span<byte> msg, int index) => BitConverter.ToSingle(msg.ReverseSlice(index, 4));
4141

42-
public static string GetString(ReadOnlySpan<byte> msg, int index)
42+
public static string GetString(ReadOnlySpan<byte> msg, int index, out int newIndex)
4343
{
4444
var i = index + 4;
4545
for (; i - 1 < msg.Length; i += 4)
4646
{
4747
if (msg[i - 1] != 0) continue;
48+
newIndex = i;
4849
return Encoding.UTF8.GetString(msg[index..i]).Replace("\0", "");
4950
}
5051

0 commit comments

Comments
 (0)