You might have seen posts from Reini Urban about "huge security risks" in perl and some of the modules from CPAN.
Personally I think he overreacts, but he *is* pointing at possible problem areas. One of his tools is perl compiled with clang and sanitizer options. In order to verify a report of his on Text::CSV_XS, I installed clang on my laptop and built a perl with it: $ Configure -des -Duse64bitint -Duselongdouble -Dcc=clang \ -Accflags=-faddress-sanitizer -Aldflags=-faddress-sanitizer \ -Alddlflags=-shared And used that to verify my changes in Text::CSV_XS: fixed and verified. I thought I might as wel try it on DBI $ make ⋮ clang -c -fsanitize=address -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -DVERSION=\"1.622\" -DXS_VERSION=\"1.622\" -fPIC "-I/media/Tux/perls-c/lib/5.17.6/i686-linux-64int-ld/CORE" -W -Wall -Wpointer-arith -Wbad-function-cast -Wno-comment -Wno-sign-compare -Wno-cast-qual -Wmissing-noreturn -Wno-unused-parameter -DDBI_NO_THREADS DBI.c DBI.xs:1822:17: warning: explicitly assigning a variable of type 'SV *' (aka 'struct sv *') to itself [-Wself-assign] attribs = attribs; /* avoid 'unused variable' warning */ ~~~~~~~ ^ ~~~~~~~ DBI.xs:4668:11: warning: explicitly assigning a variable of type 'I32' (aka 'long') to itself [-Wself-assign] ix=ix; /* avoid 'unused variable' warnings */ ~~^~~ DBI.xs:5136:12: warning: explicitly assigning a variable of type 'I32' (aka 'long') to itself [-Wself-assign] ix = ix; /* avoid 'unused variable' warning' */ ~~ ^ ~~ 3 warnings generated. not bad at all, but then … $ make test PERL_DL_NONLAZY=1 /media/Tux/perls-c/bin/perl5.17.6 "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t t/01basics.t .................... ok t/02dbidrv.t .................... ok t/03handle.t .................... ok t/04mods.t ...................... ok t/05concathash.t ................ ok t/06attrs.t ..................... ok t/07kids.t ...................... ok t/08keeperr.t ................... ok t/09trace.t ..................... ok t/10examp.t ..................... ok t/11fetch.t ..................... 1/24 ================================================================= ==22361== ERROR: AddressSanitizer: heap-use-after-free on address 0xb61f7744 at pc 0xb6c53264 bp 0xbf9df7f8 sp 0xbf9df7f0 READ of size 4 at 0xb61f7744 thread T0 #0 0xb6c53263 (/media/Tux/perls/cpan/build/DBI-1.622-KlpQfc/blib/arch/auto/DBI/DBI.so+0xa263) #1 0x822607e (/media/Tux/perls-c/bin/perl5.17.6+0x822607e) #2 0x80ba70e (/media/Tux/perls-c/bin/perl5.17.6+0x80ba70e) #3 0x824b9a8 (/media/Tux/perls-c/bin/perl5.17.6+0x824b9a8) 0xb61f7744 is located 4 bytes inside of 124-byte region [0xb61f7740,0xb61f77bc) freed by thread T0 here: #0 0x83b5193 (/media/Tux/perls-c/bin/perl5.17.6+0x83b5193) #1 0x8249cc8 (/media/Tux/perls-c/bin/perl5.17.6+0x8249cc8) #2 0x824c7a7 (/media/Tux/perls-c/bin/perl5.17.6+0x824c7a7) previously allocated by thread T0 here: #0 0x83b5253 (/media/Tux/perls-c/bin/perl5.17.6+0x83b5253) #1 0x81bc567 (/media/Tux/perls-c/bin/perl5.17.6+0x81bc567) Shadow byte and word: 0x36c3eee8: fd 0x36c3eee8: fd fd fd fd More shadow bytes: 0x36c3eed8: fa fa fa fa 0x36c3eedc: fa fa fa fa 0x36c3eee0: fa fa fa fa 0x36c3eee4: fa fa fa fa =>0x36c3eee8: fd fd fd fd 0x36c3eeec: fd fd fd fd 0x36c3eef0: fd fd fd fd 0x36c3eef4: fd fd fd fd 0x36c3eef8: fa fa fa fa Stats: 6M malloced (12M for red zones) by 70039 calls Stats: 0M realloced by 12315 calls Stats: 3M freed by 47587 calls Stats: 0M really freed by 0 calls Stats: 22M (5651 full pages) mmaped in 44 calls mmaps by size class: 7:57330; 8:12282; 9:1023; 10:1022; 11:510; 12:384; 13:448; 14:192; 15:16; 16:8; 17:4; mallocs by size class: 7:55142; 8:12095; 9:876; 10:658; 11:360; 12:323; 13:401; 14:170; 15:8; 16:5; 17:1; frees by size class: 7:35065; 8:11668; 9:311; 10:220; 11:56; 12:99; 13:45; 14:114; 15:7; 16:2; rfrees by size class: Stats: malloc large: 14 small slow: 596 ==22361== ABORTING t/11fetch.t ..................... Dubious, test returned 1 (wstat 256, 0x100) All 24 subtests passed t/12quote.t ..................... 1/10 ================================================================= ==22362== ERROR: AddressSanitizer: heap-use-after-free on address 0xb6ac7c44 at pc 0xb6bc2264 bp 0xbf9d2918 sp 0xbf9d2910 READ of size 4 at 0xb6ac7c44 thread T0 #0 0xb6bc2263 (/media/Tux/perls/cpan/build/DBI-1.622-KlpQfc/blib/arch/auto/DBI/DBI.so+0xa263) #1 0x822607e (/media/Tux/perls-c/bin/perl5.17.6+0x822607e) #2 0x80ba70e (/media/Tux/perls-c/bin/perl5.17.6+0x80ba70e) #3 0x824b9a8 (/media/Tux/perls-c/bin/perl5.17.6+0x824b9a8) 0xb6ac7c44 is located 4 bytes inside of 124-byte region [0xb6ac7c40,0xb6ac7cbc) freed by thread T0 here: #0 0x83b5193 (/media/Tux/perls-c/bin/perl5.17.6+0x83b5193) #1 0x8249cc8 (/media/Tux/perls-c/bin/perl5.17.6+0x8249cc8) #2 0x824c7a7 (/media/Tux/perls-c/bin/perl5.17.6+0x824c7a7) previously allocated by thread T0 here: #0 0x83b5253 (/media/Tux/perls-c/bin/perl5.17.6+0x83b5253) #1 0x81bc567 (/media/Tux/perls-c/bin/perl5.17.6+0x81bc567) Shadow byte and word: 0x36d58f88: fd 0x36d58f88: fd fd fd fd More shadow bytes: 0x36d58f78: fa fa fa fa 0x36d58f7c: fa fa fa fa 0x36d58f80: fa fa fa fa 0x36d58f84: fa fa fa fa =>0x36d58f88: fd fd fd fd 0x36d58f8c: fd fd fd fd 0x36d58f90: fd fd fd fd 0x36d58f94: fd fd fd fd 0x36d58f98: fa fa fa fa Stats: 4M malloced (6M for red zones) by 33775 calls Stats: 0M realloced by 3815 calls Stats: 1M freed by 19953 calls Stats: 0M really freed by 0 calls Stats: 12M (3211 full pages) mmaped in 25 calls mmaps by size class: 7:28665; 8:4094; 9:1023; 10:1022; 11:510; 12:384; 13:256; 14:128; mallocs by size class: 7:27507; 8:3876; 9:794; 10:613; 11:338; 12:289; 13:250; 14:108; frees by size class: 7:15807; 8:3508; 9:239; 10:192; 11:41; 12:77; 13:23; 14:66; rfrees by size class: Stats: malloc large: 0 small slow: 348 ==22362== ABORTING t/12quote.t ..................... Dubious, test returned 1 (wstat 256, 0x100) All 10 subtests passed t/13taint.t ..................... ok t/14utf8.t ...................... 1/16 ================================================================= ==22364== ERROR: AddressSanitizer: heap-use-after-free on address 0xb61cae44 at pc 0xb6b96264 bp 0xbfb4a7d8 sp 0xbfb4a7d0 READ of size 4 at 0xb61cae44 thread T0 #0 0xb6b96263 (/media/Tux/perls/cpan/build/DBI-1.622-KlpQfc/blib/arch/auto/DBI/DBI.so+0xa263) #1 0x822607e (/media/Tux/perls-c/bin/perl5.17.6+0x822607e) #2 0x80ba70e (/media/Tux/perls-c/bin/perl5.17.6+0x80ba70e) #3 0x824b9a8 (/media/Tux/perls-c/bin/perl5.17.6+0x824b9a8) 0xb61cae44 is located 4 bytes inside of 124-byte region [0xb61cae40,0xb61caebc) freed by thread T0 here: #0 0x83b5193 (/media/Tux/perls-c/bin/perl5.17.6+0x83b5193) #1 0x8249cc8 (/media/Tux/perls-c/bin/perl5.17.6+0x8249cc8) #2 0x824c7a7 (/media/Tux/perls-c/bin/perl5.17.6+0x824c7a7) previously allocated by thread T0 here: #0 0x83b5253 (/media/Tux/perls-c/bin/perl5.17.6+0x83b5253) #1 0x81bc567 (/media/Tux/perls-c/bin/perl5.17.6+0x81bc567) Shadow byte and word: 0x36c395c8: fd 0x36c395c8: fd fd fd fd More shadow bytes: 0x36c395b8: fa fa fa fa 0x36c395bc: fa fa fa fa 0x36c395c0: fa fa fa fa 0x36c395c4: fa fa fa fa =>0x36c395c8: fd fd fd fd 0x36c395cc: fd fd fd fd 0x36c395d0: fd fd fd fd 0x36c395d4: fd fd fd fd 0x36c395d8: fa fa fa fa Stats: 6M malloced (11M for red zones) by 69528 calls Stats: 0M realloced by 12003 calls Stats: 3M freed by 46075 calls Stats: 0M really freed by 0 calls Stats: 21M (5393 full pages) mmaped in 42 calls mmaps by size class: 7:57330; 8:12282; 9:1023; 10:1022; 11:510; 12:384; 13:384; 14:192; 15:16; 16:8; mallocs by size class: 7:54565; 8:12138; 9:932; 10:682; 11:367; 12:332; 13:339; 14:167; 15:4; 16:2; frees by size class: 7:33510; 8:11660; 9:347; 10:238; 11:57; 12:98; 13:45; 14:117; 15:3; rfrees by size class: Stats: malloc large: 6 small slow: 580 ==22364== ABORTING t/14utf8.t ...................... Dubious, test returned 1 (wstat 256, 0x100) All 16 subtests passed t/15array.t ..................... ok t/16destroy.t ................... ok t/19fhtrace.t ................... ok t/20meta.t ...................... ok t/30subclass.t .................. ok t/31methcache.t ................. ok t/35thrclone.t .................. skipped: this linux perl 5.017006 not supported for DBI iThreads t/40profile.t ................... ok t/41prof_dump.t ................. ok t/42prof_data.t ................. ok t/43prof_env.t .................. ok t/48dbi_dbd_sqlengine.t ......... ok t/49dbd_file.t .................. ok t/50dbm_simple.t ................ ok t/51dbm_file.t .................. 1/? DBD::DBM::db selectall_arrayref failed: Execution ERROR: Cannot open /media/Tux/perls/cpan/build/DBI-1.622-KlpQfc/fred.lck: No such file or directory (2) at /media/Tux/perls/cpan/build/DBI-1.622-KlpQfc/blib/lib/DBD/File.pm line 730. called from t/51dbm_file.t at 122. [for Statement "select * from Fred"] at t/51dbm_file.t line 122. Can't use an undefined value as an ARRAY reference at t/51dbm_file.t line 123. # Tests were run but no plan was declared and done_testing() was not seen. t/51dbm_file.t .................. Dubious, test returned 2 (wstat 512, 0x200) All 11 subtests passed t/52dbm_complex.t ............... skipped: Not running with MLDBM t/60preparse.t .................. ok t/65transact.t .................. ok t/70callbacks.t ................. ok t/72childhandles.t .............. ok t/80proxy.t ..................... skipped: modules required for proxy are probably not installed (e.g., RPC/PlClient.pm) t/85gofer.t ..................... ok t/86gofer_fail.t ................ ok t/87gofer_cache.t ............... ok t/90sql_type_cast.t ............. ok t/pod-coverage.t ................ skipped: Test::Pod::Coverage 1.04 required for testing POD coverage t/pod.t ......................... skipped: Test::Pod 1.00 required for testing POD -- skip the z tests -- H.Merijn Brand http://tux.nl Perl Monger http://amsterdam.pm.org/ using perl5.00307 .. 5.17 porting perl5 on HP-UX, AIX, and openSUSE http://mirrors.develooper.com/hpux/ http://www.test-smoke.org/ http://qa.perl.org http://www.goldmark.org/jeff/stupid-disclaimers/