Skip to content

Commit 00f9660

Browse files
authored
Merge pull request #215 from elemoine/ele_lazperf-datasize
Fix bug in pc_patch_uncompressed_from_lazperf
2 parents 61e3604 + 8e82233 commit 00f9660

5 files changed

Lines changed: 36 additions & 19 deletions

File tree

lib/cunit/cu_pc_patch_lazperf.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,9 @@ test_patch_lazperf()
107107
CU_ASSERT_EQUAL(pauref->readonly, paul->readonly);
108108
CU_ASSERT_EQUAL(pauref->readonly, pal->readonly);
109109

110+
// test datasize
111+
CU_ASSERT_EQUAL(paul->datasize, pauref->datasize);
112+
110113
// free
111114
pc_pointlist_free(pl);
112115
pc_patch_free( (PCPATCH*) pal );

lib/pc_patch_lazperf.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ pc_patch_uncompressed_from_lazperf(const PCPATCH_LAZPERF *palaz)
9797

9898
if (size != -1)
9999
{
100+
size_t datasize;
100101
pcu = pcalloc(sizeof(PCPATCH_UNCOMPRESSED));
101102
pcu->type = PC_NONE;
102103
pcu->readonly = PC_FALSE;
@@ -107,10 +108,12 @@ pc_patch_uncompressed_from_lazperf(const PCPATCH_LAZPERF *palaz)
107108

108109
// not optimal but we have to pass by the context manager otherwise
109110
// a segfault happenned (sometimes) during a pcfree of lazperf field
110-
pcu->data = (uint8_t*) pcalloc(palaz->schema->size * palaz->npoints);
111-
memcpy(pcu->data, decompressed, palaz->schema->size * palaz->npoints);
111+
datasize = palaz->schema->size * palaz->npoints;
112+
pcu->data = (uint8_t*) pcalloc(datasize);
113+
memcpy(pcu->data, decompressed, datasize);
112114
free(decompressed);
113115

116+
pcu->datasize = datasize;
114117
pcu->maxpoints = palaz->npoints;
115118
}
116119
else

pgsql/expected/pointcloud-laz.out

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,14 @@ VALUES (5, 0,
4040
</pc:PointCloudSchema>'
4141
);
4242
CREATE TABLE IF NOT EXISTS pa_test_laz (
43+
id SERIAL,
4344
pa PCPATCH(5)
4445
);
4546
\d pa_test_laz
46-
Table "public.pa_test_laz"
47-
Column | Type | Modifiers
48-
--------+------------+-----------
47+
Table "public.pa_test_laz"
48+
Column | Type | Modifiers
49+
--------+------------+----------------------------------------------------------
50+
id | integer | not null default nextval('pa_test_laz_id_seq'::regclass)
4951
pa | pcpatch(5) |
5052

5153
INSERT INTO pa_test_laz (pa) VALUES ('0000000005000000000000000200000002000000030000000500060000000200000003000000050008');
@@ -79,12 +81,12 @@ SELECT pc_astext(pc_explode(pa)) FROM pa_test_laz;
7981
(8 rows)
8082

8183
SELECT * FROM pa_test_laz;
82-
pa
83-
------------------------------------------------------------------------------
84-
01050000000300000002000000140000000200000003000000050000000600000005A10000
85-
0105000000030000000200000015000000060000000700000005000000060013884A3A000000
86-
01050000000300000002000000150000000200000003000000050000000600000006D8000000
87-
0105000000030000000200000015000000020000000300000005000000060000000B1E000000
84+
id | pa
85+
----+------------------------------------------------------------------------------
86+
1 | 01050000000300000002000000140000000200000003000000050000000600000005A10000
87+
2 | 0105000000030000000200000015000000060000000700000005000000060013884A3A000000
88+
3 | 01050000000300000002000000150000000200000003000000050000000600000006D8000000
89+
4 | 0105000000030000000200000015000000020000000300000005000000060000000B1E000000
8890
(4 rows)
8991

9092
SELECT Sum(PC_NumPoints(pa)) FROM pa_test_laz;
@@ -111,6 +113,12 @@ SELECT Sum(PC_PatchMin(pa,'x')) FROM pa_test_laz;
111113
0.12
112114
(1 row)
113115

116+
SELECT PC_Uncompress(pa) FROM pa_test_laz WHERE id=1;
117+
pc_uncompress
118+
------------------------------------------------------------------------------------
119+
0105000000000000000200000002000000030000000500000006000200000003000000050000000800
120+
(1 row)
121+
114122
DELETE FROM pa_test_laz;
115123
INSERT INTO pa_test_laz (pa)
116124
SELECT PC_Patch(PC_MakePoint(5, ARRAY[x,y,z,intensity]))
@@ -174,13 +182,13 @@ SELECT pc_astext(pc_explode(pa)) FROM pa_test_laz LIMIT 20;
174182
(20 rows)
175183

176184
SELECT * FROM pa_test_laz LIMIT 20;
177-
pa
178-
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
179-
0105000000030000000100000012000000A4D4FFFFD417000000710200A00001000000
180-
01050000000300000090010000F4000000F4CFFFFF24130000409C0000280003F27D65F909E1B4FF163125F3217D67B1A6E9728B7246DB622DAD94954405C57B953BE39649652F560A1AC414A371CE3967FBC090345EE0B9E0B3E7B024BBE31373EAA273E1696F7D46E70DCAB367103ECFDA0DF36E4F77901A2C8CE2F4718BDF6680076FFB02B320FA9ED30DFF79A17102E4E48D349A3098EC43031CE4E6B294D0A4442354A6626BCDEF20DF2C154144DA5FD99CE0DADBF4C7153ED51B4D43A3A5A0DBF1FBA5CA5C6C9630C1CA7662A002A217E22CF7357FA19EFCBA6F6C7E91035176B2DF753BD5954A923FA6A95C848053BCE36381D7EA15D928A88612B1E49BD6000000
181-
01050000000300000090010000F400000014D3FFFF44160000C0D40100780003F27D65F909E1B4FF163125F3217D67B1A6E9728B7246DB622DAD94954405C57B953BE39649652F560A1AC414A371CE3967FBC090345EE0B9E0B3E7B024BBE31373EAA273E1696F7D46E70DCAB367103ECFDA0DF36E4F77901A2C8CE2F4718BDF6680076FFB02B320FA9ED30DFF79A17102E4E48D349A3098EC43031CE4E6B294D0A4442354A6626BCDEF20DF2C154144DA5FD99CE0DADBF4C7153ED51B4D43A3A5A0DBF1FBA5CA5C6C9630C1CA7662A002A217E22CF7357FA19EFCBA6F6C7E91035176B2DF753BD5954A923FA6A95C848053BCE36381D7EA15D928A88612B1E49BD6000000
182-
0105000000030000008F010000F400000065CEFFFF9511000064000000000003F27D65F909E1B4FF163125F3217D67B1A6E9728B7246DB622DAD94954405D5CF50EBF47F3F94647B9C1238B6EFFF7200D0A51A36EC28ABD9AAAB0C6351B91042FA4DFB9A4C97A00E088A4033DAF7FC2FC798FFDEF31FC02D5C881C2A92086291FDC6832A9E966831DC62112CFBE18094BF4B398D29C9A29EB9868F208DBB735025F1EAA03FD8D064FB7B012CD72D8E6CC5E82B221E17B55000071A6B70136AAB145FB0F48BE8ADB1D33E88E13D7DE876B582245BC78DB10A9CB31673C349380CF301873FF20D65406448D9889258A582908A6D2E85B58918B4B98E50BC5ADB5B11DB000000
183-
01050000000300000090010000F400000084D1FFFFB414000080380100500003F27D65F909E1B4FF163125F3217D67B1A6E9728B7246DB622DAD94954405C57B953BE39649652F560A1AC414A371CE3967FBC090345EE0B9E0B3E7B024BBE31373EAA273E1696F7D46E70DCAB367103ECFDA0DF36E4F77901A2C8CE2F4718BDF6680076FFB02B320FA9ED30DFF79A17102E4E48D349A3098EC43031CE4E6B294D0A4442354A6626BCDEF20DF2C154144DA5FD99CE0DADBF4C7153ED51B4D43A3A5A0DBF1FBA5CA5C6C9630C1CA7662A002A217E22CF7357FA19EFCBA6F6C7E91035176B2DF753BD5954A923FA6A95C848053BCE36381D7EA15D928A88612B1E49BD6000000
185+
id | pa
186+
----+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
187+
5 | 0105000000030000000100000012000000A4D4FFFFD417000000710200A00001000000
188+
6 | 01050000000300000090010000F4000000F4CFFFFF24130000409C0000280003F27D65F909E1B4FF163125F3217D67B1A6E9728B7246DB622DAD94954405C57B953BE39649652F560A1AC414A371CE3967FBC090345EE0B9E0B3E7B024BBE31373EAA273E1696F7D46E70DCAB367103ECFDA0DF36E4F77901A2C8CE2F4718BDF6680076FFB02B320FA9ED30DFF79A17102E4E48D349A3098EC43031CE4E6B294D0A4442354A6626BCDEF20DF2C154144DA5FD99CE0DADBF4C7153ED51B4D43A3A5A0DBF1FBA5CA5C6C9630C1CA7662A002A217E22CF7357FA19EFCBA6F6C7E91035176B2DF753BD5954A923FA6A95C848053BCE36381D7EA15D928A88612B1E49BD6000000
189+
7 | 01050000000300000090010000F400000014D3FFFF44160000C0D40100780003F27D65F909E1B4FF163125F3217D67B1A6E9728B7246DB622DAD94954405C57B953BE39649652F560A1AC414A371CE3967FBC090345EE0B9E0B3E7B024BBE31373EAA273E1696F7D46E70DCAB367103ECFDA0DF36E4F77901A2C8CE2F4718BDF6680076FFB02B320FA9ED30DFF79A17102E4E48D349A3098EC43031CE4E6B294D0A4442354A6626BCDEF20DF2C154144DA5FD99CE0DADBF4C7153ED51B4D43A3A5A0DBF1FBA5CA5C6C9630C1CA7662A002A217E22CF7357FA19EFCBA6F6C7E91035176B2DF753BD5954A923FA6A95C848053BCE36381D7EA15D928A88612B1E49BD6000000
190+
8 | 0105000000030000008F010000F400000065CEFFFF9511000064000000000003F27D65F909E1B4FF163125F3217D67B1A6E9728B7246DB622DAD94954405D5CF50EBF47F3F94647B9C1238B6EFFF7200D0A51A36EC28ABD9AAAB0C6351B91042FA4DFB9A4C97A00E088A4033DAF7FC2FC798FFDEF31FC02D5C881C2A92086291FDC6832A9E966831DC62112CFBE18094BF4B398D29C9A29EB9868F208DBB735025F1EAA03FD8D064FB7B012CD72D8E6CC5E82B221E17B55000071A6B70136AAB145FB0F48BE8ADB1D33E88E13D7DE876B582245BC78DB10A9CB31673C349380CF301873FF20D65406448D9889258A582908A6D2E85B58918B4B98E50BC5ADB5B11DB000000
191+
9 | 01050000000300000090010000F400000084D1FFFFB414000080380100500003F27D65F909E1B4FF163125F3217D67B1A6E9728B7246DB622DAD94954405C57B953BE39649652F560A1AC414A371CE3967FBC090345EE0B9E0B3E7B024BBE31373EAA273E1696F7D46E70DCAB367103ECFDA0DF36E4F77901A2C8CE2F4718BDF6680076FFB02B320FA9ED30DFF79A17102E4E48D349A3098EC43031CE4E6B294D0A4442354A6626BCDEF20DF2C154144DA5FD99CE0DADBF4C7153ED51B4D43A3A5A0DBF1FBA5CA5C6C9630C1CA7662A002A217E22CF7357FA19EFCBA6F6C7E91035176B2DF753BD5954A923FA6A95C848053BCE36381D7EA15D928A88612B1E49BD6000000
184192
(5 rows)
185193

186194
SELECT Sum(PC_NumPoints(pa)) FROM pa_test_laz;

pgsql/pc_pgsql.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -796,7 +796,7 @@ pc_patch_uncompressed_deserialize(const SERIALIZED_PATCH *serpatch, const PCSCHE
796796
/* Calculate the point data buffer size */
797797
patch->datasize = VARSIZE(serpatch) - sizeof(SERIALIZED_PATCH) + 1 - stats_size;
798798
if ( patch->datasize != patch->npoints * schema->size )
799-
pcerror("%s: calucated patch data sizes don't match (%d != %d)", __func__, patch->datasize, patch->npoints * schema->size);
799+
pcerror("%s: calculated patch data sizes don't match (%d != %d)", __func__, patch->datasize, patch->npoints * schema->size);
800800

801801
return (PCPATCH*)patch;
802802
}

pgsql/sql/pointcloud-laz.sql

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ VALUES (5, 0,
4242

4343

4444
CREATE TABLE IF NOT EXISTS pa_test_laz (
45+
id SERIAL,
4546
pa PCPATCH(5)
4647
);
4748
\d pa_test_laz
@@ -60,6 +61,8 @@ SELECT Sum(PC_MemSize(pa)) FROM pa_test_laz;
6061
SELECT Sum(PC_PatchMax(pa,'x')) FROM pa_test_laz;
6162
SELECT Sum(PC_PatchMin(pa,'x')) FROM pa_test_laz;
6263

64+
SELECT PC_Uncompress(pa) FROM pa_test_laz WHERE id=1;
65+
6366
DELETE FROM pa_test_laz;
6467
INSERT INTO pa_test_laz (pa)
6568
SELECT PC_Patch(PC_MakePoint(5, ARRAY[x,y,z,intensity]))

0 commit comments

Comments
 (0)