[pdal] seg-fault when compressing zero points with lazperf

Jim Klassen klassen.js at gmail.com
Tue Jan 18 12:05:25 PST 2022


I noticed another related but likely different issue too.  It looks like zero point laz files made with pdal are invalid (compressed with laszip or lazperf w/patch).  Zero point las files appear OK.

$ pdal translate lasperf.fail.txt lasperf.fail.las
$ pdal translate lasperf.fail.txt lasperf.fail.laz --writers.las.compression=laszip

$ ls -l lasperf.fail.la?
-rw-r--r-- 1 jimk jimk 227 Jan 18 08:53 lasperf.fail.las
-rw-r--r-- 1 jimk jimk 349 Jan 18 08:54 lasperf.fail.laz

$ pdal info lasperf.fail.laz
PDAL: Unexpected end of file.

$ pdal info lasperf.fail.las
{
   "file_size": 227,
   "filename": "lasperf.fail.las",
   "now": "2022-01-18T08:53:14-0600",
   "pdal_version": "2.3.0 (git-version: ac8068)",
   "reader": "readers.las",
   "stats":
   {
     "statistic":
     [
       {
         "average": 0,
         "count": 0,
         "maximum": -1.797693135e+308,
         "minimum": 1.797693135e+308,
         "name": "X",
         "position": 0,
         "stddev": 0,
         "variance": 0
       },
...

On 1/18/22 08:54, Andrew Bell wrote:
> Trying again... here's the ticket... https://github.com/PDAL/PDAL/issues/3652
>
> On Tue, Jan 18, 2022 at 9:54 AM Andrew Bell <andrew.bell.ia at gmail.com> wrote:
>
>     Here's the ticket...
>
>     On Tue, Jan 18, 2022 at 9:52 AM Andrew Bell <andrew.bell.ia at gmail.com> wrote:
>
>         I've already fixed this, but I can't locate the PR right now. I'll write again when I find it.
>
>         On Tue, Jan 18, 2022 at 9:48 AM Jim Klassen <klassen.js at gmail.com> wrote:
>
>             It appears there is a seg-fault in pdal when compressing a file with zero points with lazperf.  Using laszip correctly creates an empty laz file.  With at least one point into the source file both laszip and lazperf work as expected.
>
>             My guess is LazPerfVlrCompressorImpl::compress() is never getting called, so m_compressor is null, but that condition isn't being checked in LazPerfVlrCompressorImpl::done() before calling m_compress->done().  I'm not sure how much of LazPerfVlrCompressorImpl::done() should be skipped if m_compressor is null (there were no points to process).
>
>
>             liblaszip: 3.4.1-6-gc7b67ca
>             laz-perf: 3.0.0-1-g03ed832
>             pdal: ac8068c7d
>
>
>             $ cat lasperf.fail.txt
>             X,Y,Z
>
>             $ pdal info lasperf.fail.txt
>             {
>                "file_size": 7,
>                "filename": "lasperf.fail.txt",
>                "now": "2022-01-18T08:19:08-0600",
>                "pdal_version": "2.3.0 (git-version: ac8068)",
>                "reader": "readers.text",
>                "stats":
>                {
>                  "statistic":
>                  [
>                    {
>                      "average": 0,
>                      "count": 0,
>                      "maximum": -1.797693135e+308,
>                      "minimum": 1.797693135e+308,
>                      "name": "X",
>                      "position": 0,
>                      "stddev": 0,
>                      "variance": 0
>                    },
>                    {
>                      "average": 0,
>                      "count": 0,
>                      "maximum": -1.797693135e+308,
>                      "minimum": 1.797693135e+308,
>                      "name": "Y",
>                      "position": 1,
>                      "stddev": 0,
>                      "variance": 0
>                    },
>                    {
>                      "average": 0,
>                      "count": 0,
>                      "maximum": -1.797693135e+308,
>                      "minimum": 1.797693135e+308,
>                      "name": "Z",
>                      "position": 2,
>                      "stddev": 0,
>                      "variance": 0
>                    }
>                  ]
>                }
>             }
>             $ pdal translate lasperf.fail.txt lasperf.fail.laz --writers.las.compression=laszip
>             $ pdal translate lasperf.fail.txt lasperf.fail.laz --writers.las.compression=lazperf
>             Segmentation fault
>             $ gdb --args pdal translate lasperf.fail.txt lasperf.fail.laz --writers.las.compression=lazperf
>             GNU gdb (Debian 10.1-1.7) 10.1.90.20210103-git
>             Copyright (C) 2021 Free Software Foundation, Inc.
>             License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
>             This is free software: you are free to change and redistribute it.
>             There is NO WARRANTY, to the extent permitted by law.
>             Type "show copying" and "show warranty" for details.
>             This GDB was configured as "x86_64-linux-gnu".
>             Type "show configuration" for configuration details.
>             For bug reporting instructions, please see:
>             <https://www.gnu.org/software/gdb/bugs/>.
>             Find the GDB manual and other documentation resources online at:
>                  <http://www.gnu.org/software/gdb/documentation/>.
>
>             For help, type "help".
>             Type "apropos word" to search for commands related to "word"...
>             Reading symbols from pdal...
>             (No debugging symbols found in pdal)
>             (gdb) run
>             Starting program: /apps/PointClouds/pdal/2.3.0-ac8068c7d-laszip/bin/pdal translate lasperf.fail.txt lasperf.fail.laz --writers.las.compression=lazperf
>             [Thread debugging using libthread_db enabled]
>             Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
>
>             Program received signal SIGSEGV, Segmentation fault.
>             0x00007ffff7e0c4d9 in pdal::LazPerfVlrCompressorImpl::done (this=0x4c2ea0)
>                  at /apps/PointClouds/pdal/src/pdal/pdal/compression/LazPerfVlrCompression.cpp:101
>             101            m_compressor->done();
>             (gdb) print m_compressor
>             $1 = std::shared_ptr<lazperf::las_compressor> (empty) = {get() = 0x0}
>             (gdb) quit
>             A debugging session is active.
>
>                  Inferior 1 [process 283225] will be killed.
>
>             Quit anyway? (y or n) y
>             $
>
>             _______________________________________________
>             pdal mailing list
>             pdal at lists.osgeo.org
>             https://lists.osgeo.org/mailman/listinfo/pdal
>
>
>
>         -- 
>         Andrew Bell
>         andrew.bell.ia at gmail.com
>
>
>
>     -- 
>     Andrew Bell
>     andrew.bell.ia at gmail.com
>
>
>
> -- 
> Andrew Bell
> andrew.bell.ia at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/pdal/attachments/20220118/84100f17/attachment.html>


More information about the pdal mailing list