Skip to content

Commit 26bdeb6

Browse files
committed
Fix BufferReader CString multi slices
1 parent 01828e2 commit 26bdeb6

File tree

6 files changed

+55
-19
lines changed

6 files changed

+55
-19
lines changed
192 KB
Binary file not shown.
6.97 MB
Binary file not shown.
64 Bytes
Binary file not shown.
6.97 MB
Binary file not shown.

LiteDB.Tests/Internals/BufferWriter_Tests.cs

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,61 @@
33
using System.Text;
44
using FluentAssertions;
55
using LiteDB.Engine;
6+
using System.Collections.Generic;
67
using Xunit;
78

89
namespace LiteDB.Internals
910
{
1011
public class BufferWriter_Tests
1112
{
13+
[Fact]
14+
public void Buffer_Write_CString()
15+
{
16+
var doc = JsonSerializer.Deserialize("{\"_id\":{\"$numberLong\":\"5\"},\"unique_id\":\"20-133-5\",\"event_log\":[{\"created\":{\"$date\":\"2020-05-06T09:29:10.8350000Z\"},\"type\":\"job_created\"},{\"created\":{\"$date\":\"2020-05-06T09:29:19.0510000Z\"},\"type\":\"asset_added\",\"data\":{\"filename\":[\"IMG_1333.JPG\"],\"filepath\":[\"D:\\\\Users\\\\Daniel\\\\Desktop\\\\German Shepherd\\\\IMG_1333.JPG\"]}},{\"created\":{\"$date\":\"2020-05-06T09:29:23.6910000Z\"},\"type\":\"lookup_preformed\",\"data\":{\"searchterm\":[\"1424101.2\"]}},{\"created\":{\"$date\":\"2020-05-06T09:29:25.9060000Z\"},\"type\":\"lookup_selected\"},{\"created\":{\"$date\":\"2020-05-06T09:29:43.7350000Z\"},\"type\":\"job_saved\"},{\"created\":{\"$date\":\"2020-05-06T09:29:43.7900000Z\"},\"type\":\"job_closed\"},{\"created\":{\"$date\":\"2020-06-10T16:00:30.3950000Z\"},\"type\":\"job_deleted\"},{\"created\":{\"$date\":\"2020-06-10T16:00:30.3950000Z\"},\"type\":\"job_deleted\"},{\"created\":{\"$date\":\"2020-06-10T16:00:30.3950000Z\"},\"type\":\"job_deleted\"},{\"created\":{\"$date\":\"2020-06-10T16:00:30.3950000Z\"},\"type\":\"job_deleted\"}],\"status\":\"PERMANANTDELETE\",\"cleaned_up\":false,\"user_info\":{\"href\":\"/fotoweb/users/dan%40deathstar.local\",\"userName\":\"[email protected]\",\"fullName\":\"Dan Twomey\",\"firstName\":\"Dan\",\"lastName\":\"Twomey\",\"email\":\"[email protected]\",\"userId\":\"15003\",\"isGuest\":\"false\",\"userAvatarHref\":\"https://www.gravatar.com/avatar/9496065924d90ffa6b6184c741aa0184?d=mm\"},\"device_info\":{\"_id\":null,\"short_id\":133,\"device_name\":\"DANSCOMPUTER\"},\"template_id\":\"5cb0b82fd1654e07c7a3dd72\",\"created\":{\"$date\":\"2020-05-06T09:29:10.8350000Z\"},\"last_save\":{\"$date\":\"2020-06-15T19:40:50.8250000Z\"},\"files\":[{\"_id\":\"5f9bffbc-a6d7-4ccb-985b-17470745f760\",\"filename\":\"IMG_1333.JPG\",\"extension\":\".JPG\",\"file_checksum\":\"SHA1:09025C2C3009051C51877E052A740140F73EC518\",\"local_file_info\":{\"imported_datetime\":{\"$date\":\"2020-05-06T09:29:17.7650000Z\"},\"system_created_datetime\":{\"$date\":\"2020-03-26T17:04:08.9930000Z\"},\"original_file_path\":\"D:\\\\Users\\\\Daniel\\\\Desktop\\\\German Shepherd\\\\IMG_1333.JPG\",\"local_file_path\":\"C:\\\\ProgramData\\\\Medialogix\\\\Pixel\\\\Upload Storage\\\\20-133-5\\\\5f9bffbc-a6d7-4ccb-985b-17470745f760\\\\IMG_1333.JPG\",\"original_file_directory\":\"D:\\\\Users\\\\Daniel\\\\Desktop\\\\German Shepherd\",\"thumbnail_path\":\"C:\\\\ProgramData\\\\Medialogix\\\\Pixel\\\\Upload Storage\\\\20-133-5\\\\5f9bffbc-a6d7-4ccb-985b-17470745f760\\\\IMG_1333.JPG.thumb\"},\"filesize_bytes\":{\"$numberLong\":\"4225974\"},\"friendly_filesize\":\"4 MB\",\"metadata\":{\"2c0066d2-3f9f-4cf8-8d06-33a544624418\":null,\"4a389ee1-9e1b-4e06-b46f-23f1fd8f6a93\":null,\"b0ad5374-213f-488f-bb21-407e782de287\":null,\"91328cc4-eb72-4c30-9545-e931c830e847\":null,\"b94b21cf-eef3-4e8c-951a-1c20d16d871f\":null,\"3a660b33-c99f-4111-ba88-633533017b40\":null,\"500c2388-ccc1-4b63-8da1-5bbb468a0c5b\":null,\"652cdabe-3c6f-4765-86fd-1680749b412b\":null,\"2a2668c3-2b69-4f9b-89a8-914b70e00aa3\":null,\"fd67fdb2-3705-4f14-a929-5336c8e46489\":null,\"2405d44c-13d3-4ce3-8ba1-dae189139f84\":[],\"8b73f206-8b2c-4ce5-9867-a4e1892370e5\":null,\"5c73f206-8b2c-4ce5-9852-a4e1892370a5\":[\"csitemplate\"],\"9fc32696-4efd-4b6a-8fcc-554c75421cff\":[\"{{asset.uploadtype}}\"],\"c47645ab-0bfa-42e0-9c43-66868f10f90f\":[\"{{curentuser.username}}\"],\"a16a3bae-59bc-4583-9015-7f6bbd0d2b87\":[\"{{job.id}}\"]},\"status\":\"CREATED\",\"file_valid\":false,\"type\":\"IMAGE\",\"fotoweb_responses\":[]}],\"lookup_metadata\":{\"2c0066d2-3f9f-4cf8-8d06-33a544624418\":[\"1424101.2\"],\"4a389ee1-9e1b-4e06-b46f-23f1fd8f6a93\":[\"Exhibit 2\"],\"b0ad5374-213f-488f-bb21-407e782de287\":[\"1424101.2 - Exhibit 2\"],\"91328cc4-eb72-4c30-9545-e931c830e847\":[\"Location 3\"],\"b94b21cf-eef3-4e8c-951a-1c20d16d871f\":[\"DHL\"],\"3a660b33-c99f-4111-ba88-633533017b40\":[\"Medium\"]},\"error_reason\":null,\"retry_count\":0,\"error_counters\":{},\"deleted_datetime\":{\"$date\":\"2020-06-10T16:00:30.3920000Z\"},\"delete_when\":{\"$date\":\"2020-06-15T16:00:30.3920000Z\"}}").AsDocument;
17+
var size = doc.GetBytesCount(true);
18+
19+
var arr0 = new BufferSlice(new byte[2935], 0, 2935);
20+
var arr1 = new BufferSlice(new byte[97], 0, 97);
21+
var arr2 = new BufferSlice(new byte[5], 0, 5);
22+
var arr3 = new BufferSlice(new byte[189], 0, 189);
23+
24+
using (var w = new BufferWriter(new[] { arr0, arr1, arr2, arr3 }))
25+
{
26+
w.WriteDocument(doc, false);
27+
w.Consume();
28+
}
29+
30+
using (var r = new BufferReader(new[] { arr0, arr1, arr2, arr3 }))
31+
{
32+
var docNew = r.ReadDocument();
33+
}
34+
}
35+
36+
[Fact]
37+
public void Buffer_Write_CString_Basic()
38+
{
39+
var arr = new byte[500];
40+
41+
var slice0 = new BufferSlice(arr, 0, 3);
42+
var slice1 = new BufferSlice(arr, 20, 4);
43+
var slice2 = new BufferSlice(arr, 30, 5);
44+
var slice3 = new BufferSlice(arr, 40, 6);
45+
var slice4 = new BufferSlice(arr, 50, 7);
46+
47+
using (var w = new BufferWriter(new[] { slice0, slice1, slice2, slice3, slice4 }))
48+
{
49+
w.WriteCString("123456789*ABCEFGHIJ");
50+
w.WriteCString("abc");
51+
}
52+
53+
using (var r = new BufferReader(new[] { slice0, slice1, slice2, slice3, slice4 }))
54+
{
55+
var cstring0 = r.ReadCString();
56+
var cstring1 = r.ReadCString();
57+
}
58+
}
59+
60+
1261
[Fact]
1362
public void Buffer_Write_String()
1463
{

LiteDB/Engine/Disk/Serializer/BufferReader.cs

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -195,28 +195,15 @@ public string ReadCString()
195195
this.MoveFordward(initialCount);
196196

197197
// and go to next segment
198-
if (!_isEOF)
198+
while (_current[_currentPosition] != 0x00 && _isEOF == false)
199199
{
200-
while (_current[_currentPosition] != 0x00)
201-
{
202-
if (this.MoveFordward(1))
203-
{
204-
// write all segment into strem (did not found \0 yet)
205-
mem.Write(_current.Array, _current.Offset, _current.Count);
206-
}
207-
208-
if (_isEOF) break;
209-
}
210-
211-
// add last segment (if eof already added in while)
212-
if (!_isEOF)
213-
{
214-
mem.Write(_current.Array, _current.Offset, _currentPosition);
215-
}
216-
217-
this.MoveFordward(1); // +1 to '\0'
200+
mem.WriteByte(_current[_currentPosition]);
201+
202+
this.MoveFordward(1);
218203
}
219204

205+
this.MoveFordward(1); // +1 to '\0'
206+
220207
return Encoding.UTF8.GetString(mem.ToArray());
221208
}
222209
}

0 commit comments

Comments
 (0)