dleutnant / swmmr

R Interface for US EPA's SWMM
https://cran.r-project.org/package=swmmr
39 stars 15 forks source link

***buffer overflow detected*** when executing "read_out" #16

Closed ctfysh closed 5 years ago

ctfysh commented 6 years ago

Hi, when I use swmmr running the sample model "Example1.inp", then it will produce two files: "Example1.rpt" and "Example1.out". I use "read_out" function to read the file "Example1.out" into R in Ubuntu 16.04, it shows that buffer overflow detected and the R session is crashed. However, when running in Win10 with the same "Example1.out" file, it will be OK. So, I think there may be something wrong for Linux system (or maybe only for my system?). I don't know why. Hope for your reply, thanks!

dleutnant commented 6 years ago

This seems to be related to your SWMM5 and swmmr build-toolchain. I encountered a similar issue when running SWMM5 and swmmr on Debian. Using the same compiler (gcc) for SWMM5 and swmmr helped in my case.

ctfysh commented 6 years ago

I cannot compile swmmr with gcc successfully, and the default compiler is g++. I try to compile SWMM5 with gcc or g++, but the same error buffer overflow detected happened.

dleutnant commented 6 years ago

It is hard to reproduce the error. How do you compile swmmr? Could you evetually upload the .out file (if it is not too large...)?

michelk commented 6 years ago

I have the same problem on debian. I used cmake and the repository of OpenWaterAnalytics.

When I tried to compile the original release. I'll get

cc -o libswmm5.so swmm5.o climate.o controls.o culvert.o datetime.o dwflow.o dynwave.o error.o exfil.o findroot.o flowrout.o forcmain.o gage.o gwater.o hash.o hotstart.o iface.o infil.o inflow.o input.o inputrpt.o keywords.o kinwave.o landuse.o lid.o lidproc.o link.o massbal.o mathexpr.o mempool.o node.o odesolve.o output.o project.o qualrout.o rain.o rdii.o report.o roadway.o routing.o runoff.o shape.o snow.o stats.o statsrpt.o subcatch.o surfqual.o table.o toposort.o transect.o treatmnt.o xsect.o -fopenmp -lm -lpthread -shared                                                                                                        
/usr/bin/ld: swmm5.o: relocation R_X86_64_PC32 against symbol `ErrorCode' can not be used when making a shared object; recompile with -fPIC                                                                         
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
make: *** [Makefile:12: swmm5] Error 1

Any idea how to resolve this?

dleutnant commented 5 years ago

@michelk Adding CFLAGS= -fPIC to the Makefile should do the trick (s. gist)

dleutnant commented 5 years ago

@ctfysh Could you also please try the compile instructions given in the gist linked above?

ctfysh commented 5 years ago

I tried the compile instructions given in the gist, but it also produced the following error:

*** buffer overflow detected ***: /usr/lib/R/bin/exec/R terminated
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7f0816e077e5]
/lib/x86_64-linux-gnu/libc.so.6(__fortify_fail+0x5c)[0x7f0816ea915c]
/lib/x86_64-linux-gnu/libc.so.6(+0x117160)[0x7f0816ea7160]
/lib/x86_64-linux-gnu/libc.so.6(__fgets_chk+0x16c)[0x7f0816ea749c]
/mnt/d/R/x86_64-pc-linux-gnu-library/swmmr/libs/swmmr.so(_Z15OpenSwmmOutFilePKc+0xace)[0x7f080e08eeae]
/mnt/d/R/x86_64-pc-linux-gnu-library/swmmr/libs/swmmr.so(_swmmr_OpenSwmmOutFile+0x2cf)[0x7f080e086b4f]
/usr/lib/R/lib/libR.so(+0xedbad)[0x7f081746dbad]
/usr/lib/R/lib/libR.so(+0x1274e8)[0x7f08174a74e8]
/usr/lib/R/lib/libR.so(Rf_eval+0x380)[0x7f08174b1430]
/usr/lib/R/lib/libR.so(+0x132d91)[0x7f08174b2d91]
/usr/lib/R/lib/libR.so(+0x128ac7)[0x7f08174a8ac7]
/usr/lib/R/lib/libR.so(Rf_eval+0x380)[0x7f08174b1430]
/usr/lib/R/lib/libR.so(+0x132d91)[0x7f08174b2d91]
/usr/lib/R/lib/libR.so(Rf_eval+0x331)[0x7f08174b13e1]
/usr/lib/R/lib/libR.so(+0x1e9c16)[0x7f0817569c16]
/usr/lib/R/lib/libR.so(Rf_eval+0x584)[0x7f08174b1634]
/usr/lib/R/lib/libR.so(+0x1ea791)[0x7f081756a791]
/usr/lib/R/lib/libR.so(Rf_eval+0x584)[0x7f08174b1634]
/usr/lib/R/lib/libR.so(+0x1357a4)[0x7f08174b57a4]
/usr/lib/R/lib/libR.so(Rf_eval+0x584)[0x7f08174b1634]
/usr/lib/R/lib/libR.so(Rf_ReplIteration+0x222)[0x7f08174e1662]
/usr/lib/R/lib/libR.so(+0x161a71)[0x7f08174e1a71]
/usr/lib/R/lib/libR.so(run_Rmainloop+0x48)[0x7f08174e1b28]
/usr/lib/R/bin/exec/R(main+0x1b)[0x4007cb]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7f0816db0830]
/usr/lib/R/bin/exec/R(_start+0x29)[0x400809]
======= Memory map: ========
00400000-00401000 r-xp 00000000 00:00 133167                     /usr/lib/R/bin/exec/R
00600000-00601000 r--p 00000000 00:00 133167                     /usr/lib/R/bin/exec/R
00601000-00602000 rw-p 00001000 00:00 133167                     /usr/lib/R/bin/exec/R
016c3000-048a3000 rw-p 00000000 00:00 0                          [heap]
7f080e080000-7f080e094000 r-xp 00000000 00:00 51989              /mnt/d/R/x86_64-pc-linux-gnu-library/swmmr/libs/swmmr.so
7f080e094000-7f080e181000 ---p 00014000 00:00 51989              /mnt/d/R/x86_64-pc-linux-gnu-library/swmmr/libs/swmmr.so
7f080e181000-7f080e294000 ---p 00000101 00:00 51989              /mnt/d/R/x86_64-pc-linux-gnu-library/swmmr/libs/swmmr.so
7f080e294000-7f080e295000 r--p 00014000 00:00 51989              /mnt/d/R/x86_64-pc-linux-gnu-library/swmmr/libs/swmmr.so
7f080e295000-7f080e296000 rw-p 00015000 00:00 51989              /mnt/d/R/x86_64-pc-linux-gnu-library/swmmr/libs/swmmr.so
7f080e2a0000-7f080e2a5000 r-xp 00000000 00:00 134749             /mnt/d/R/x86_64-pc-linux-gnu-library/purrr/libs/purrr.so
7f080e2a5000-7f080e2b5000 ---p 00005000 00:00 134749             /mnt/d/R/x86_64-pc-linux-gnu-library/purrr/libs/purrr.so
7f080e2b5000-7f080e4a5000 ---p 00000015 00:00 134749             /mnt/d/R/x86_64-pc-linux-gnu-library/purrr/libs/purrr.so
7f080e4a5000-7f080e4a6000 r--p 00005000 00:00 134749             /mnt/d/R/x86_64-pc-linux-gnu-library/purrr/libs/purrr.so
7f080e4a6000-7f080e4a7000 rw-p 00006000 00:00 134749             /mnt/d/R/x86_64-pc-linux-gnu-library/purrr/libs/purrr.so
7f080e4b0000-7f080e4cb000 r-xp 00000000 00:00 49252              /mnt/d/R/x86_64-pc-linux-gnu-library/rlang/libs/rlang.so
7f080e4cb000-7f080e526000 ---p 0001b000 00:00 49252              /mnt/d/R/x86_64-pc-linux-gnu-library/rlang/libs/rlang.so
7f080e526000-7f080e6cb000 ---p 00000076 00:00 49252              /mnt/d/R/x86_64-pc-linux-gnu-library/rlang/libs/rlang.so
7f080e6cb000-7f080e6cc000 r--p 0001b000 00:00 49252              /mnt/d/R/x86_64-pc-linux-gnu-library/rlang/libs/rlang.so
7f080e6cc000-7f080e6cd000 rw-p 0001c000 00:00 49252              /mnt/d/R/x86_64-pc-linux-gnu-library/rlang/libs/rlang.so
7f080e6d0000-7f080e842000 r-xp 00000000 00:00 124602             /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21
7f080e842000-7f080e84f000 ---p 00172000 00:00 124602             /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21
7f080e84f000-7f080ea42000 ---p 0000017f 00:00 124602             /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21
7f080ea42000-7f080ea4c000 r--p 00172000 00:00 124602             /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21
7f080ea4c000-7f080ea4e000 rw-p 0017c000 00:00 124602             /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21
7f080ea4e000-7f080ea52000 rw-p 00000000 00:00 0
7f080ea5a000-7f080eab7000 r-xp 00000000 00:00 45991              /mnt/d/R/x86_64-pc-linux-gnu-library/Rcpp/libs/Rcpp.so
7f080eab7000-7f080ecb7000 ---p 0005d000 00:00 45991              /mnt/d/R/x86_64-pc-linux-gnu-library/Rcpp/libs/Rcpp.so
7f080ecb7000-7f080ecb8000 r--p 0005d000 00:00 45991              /mnt/d/R/x86_64-pc-linux-gnu-library/Rcpp/libs/Rcpp.so
7f080ecb8000-7f080ecb9000 rw-p 0005e000 00:00 45991              /mnt/d/R/x86_64-pc-linux-gnu-library/Rcpp/libs/Rcpp.so
7f080ecb9000-7f080ecc0000 rw-p 00000000 00:00 0
7f080ecc0000-7f080ecd5000 r-xp 00000000 00:00 133954             /usr/lib/R/library/tools/libs/tools.so
7f080ecd5000-7f080ecd7000 ---p 00015000 00:00 133954             /usr/lib/R/library/tools/libs/tools.so
7f080ecd7000-7f080eed5000 ---p 00000017 00:00 133954             /usr/lib/R/library/tools/libs/tools.so
7f080eed5000-7f080eed6000 r--p 00015000 00:00 133954             /usr/lib/R/library/tools/libs/tools.so
7f080eed6000-7f080eed7000 rw-p 00016000 00:00 133954             /usr/lib/R/library/tools/libs/tools.so
7f080eee0000-7f0812ee0000 rw-p 00000000 00:00 0
7f0812ee0000-7f0812f1e000 r-xp 00000000 00:00 126668             /usr/lib/x86_64-linux-gnu/libquadmath.so.0.0.0
7f0812f1e000-7f0812f1f000 ---p 0003e000 00:00 126668             /usr/lib/x86_64-linux-gnu/libquadmath.so.0.0.0
7f0812f1f000-7f081311d000 ---p 0000003f 00:00 126668             /usr/lib/x86_64-linux-gnu/libquadmath.so.0.0.0
7f081311d000-7f081311e000 r--p 0003d000 00:00 126668             /usr/lib/x86_64-linux-gnu/libquadmath.so.0.0.0
7f081311e000-7f081311f000 rw-p 0003e000 00:00 126668             /usr/lib/x86_64-linux-gnu/libquadmath.so.0.0.0
7f0813120000-7f0813136000 r-xp 00000000 00:00 25481              /lib/x86_64-linux-gnu/libgcc_s.so.1
7f0813136000-7f0813335000 ---p 00000016 00:00 25481              /lib/x86_64-linux-gnu/libgcc_s.so.1
7f0813335000-7f0813336000 rw-p 00015000 00:00 25481              /lib/x86_64-linux-gnu/libgcc_s.so.1
7f0813340000-7f0813469000 r-xp 00000000 00:00 128305             /usr/lib/x86_64-linux-gnu/libgfortran.so.3.0.0
7f0813469000-7f081346b000 ---p 00129000 00:00 128305             /usr/lib/x86_64-linux-gnu/libgfortran.so.3.0.0
7f081346b000-7f0813668000 ---p 0000012b 00:00 128305             /usr/lib/x86_64-linux-gnu/libgfortran.so.3.0.0
7f0813668000-7f0813669000 r--p 00128000 00:00 128305             /usr/lib/x86_64-linux-gnu/libgfortran.so.3.0.0
7f0813669000-7f081366b000 rw-p 00129000 00:00 128305             /usr/lib/x86_64-linux-gnu/libgfortran.so.3.0.0
7f0813670000-7f0813c64000 r-xp 00000000 00:00 129785             /usr/lib/lapack/liblapack.so.3.6.0
7f0813c64000-7f0813c69000 ---p 005f4000 00:00 129785             /usr/lib/lapack/liblapack.so.3.6.0
7f0813c69000-7f0813e63000 ---p 000005f9 00:00 129785             /usr/lib/lapack/liblapack.so.3.6.0
7f0813e63000-7f0813e64000 r--p 005f3000 00:00 129785             /usr/lib/lapack/liblapack.so.3.6.0
7f0813e64000-7f0813e68000 rw-p 005f4000 00:00 129785             /usr/lib/lapack/liblapack.so.3.6.0
7f0813e70000-7f0813f11000 r-xp 00000000 00:00 133566             /usr/lib/R/library/stats/libs/stats.so
7f0813f11000-7f0813f15000 ---p 000a1000 00:00 133566             /usr/lib/R/library/stats/libs/stats.so
7f0813f15000-7f0814111000 ---p 000000a5 00:00 133566             /usr/lib/R/library/stats/libs/stats.so
7f0814111000-7f0814113000 r--p 000a1000 00:00 133566             /usr/lib/R/library/stats/libs/stats.so
7f0814113000-7f0814114000 rw-p 000a3000 00:00 133566             /usr/lib/R/library/stats/libs/stats.so
7f0814114000-7f0814115000 rw-p 00000000 00:00 0
7f0814120000-7f0814169000 r-xp 00000000 00:00 133988             /usr/lib/R/library/graphics/libs/graphics.so
7f0814169000-7f081416b000 ---p 00049000 00:00 133988             /usr/lib/R/library/graphics/libs/graphics.so
7f081416b000-7f0814369000 ---p 0000004b 00:00 133988             /usr/lib/R/library/graphics/libs/graphics.so
7f0814369000-7f081436a000 r--p 00049000 00:00 133988             /usr/lib/R/library/graphics/libs/graphics.so
7f081436a000-7f081436b000 rw-p 0004a000 00:00 133988             /usr/lib/R/library/graphics/libs/graphics.so
7f0814370000-7f081437c000 r-xp 00000000 00:00 133208             /usr/lib/R/library/utils/libs/utils.so
7f081437c000-7f081437d000 ---p 0000c000 00:00 133208             /usr/lib/R/library/utils/libs/utils.so
7f081437d000-7f081457b000 ---p 0000000d 00:00 133208             /usr/lib/R/library/utils/libs/utils.so
7f081457b000-7f081457c000 r--p 0000b000 00:00 133208             /usr/lib/R/library/utils/libs/utils.so
7f081457c000-7f081457d000 rw-p 0000c000 00:00 133208             /usr/lib/R/library/utils/libs/utils.so
7f081457d000-7f081457e000 rw-p 00000000 00:00 0
7f08146e0000-7f0814716000 r-xp 00000000 00:00 133786             /usr/lib/R/library/grDevices/libs/grDevices.so
7f0814716000-7f081471c000 ---p 00036000 00:00 133786             /usr/lib/R/library/grDevices/libs/grDevices.so
7f081471c000-7f0814915000 ---p 0000003c 00:00 133786             /usr/lib/R/library/grDevices/libs/grDevices.so
7f0814915000-7f081491a000 r--p 00035000 00:00 133786             /usr/lib/R/library/grDevices/libs/grDevices.so
7f081491a000-7f081491c000 rw-p 0003a000 00:00 133786             /usr/lib/R/library/grDevices/libs/grDevices.so
7f081491c000-7f081491d000 rw-p 00000000 00:00 0
7f0814920000-7f08149fd000 rw-p 00000000 00:00 0
7f0814a00000-7f0814a02000 r-xp 00000000 00:00 30296              /usr/lib/x86_64-linux-gnu/gconv/ISO8859-1.so
7f0814a02000-7f0814a03000 ---p 00002000 00:00 30296              /usr/lib/x86_64-linux-gnu/gconv/ISO8859-1.so
7f0814a03000-7f0814c01000 ---p 00000003 00:00 30296              /usr/lib/x86_64-linux-gnu/gconv/ISO8859-1.so
7f0814c01000-7f0814c02000 r--p 00001000 00:00 30296              /usr/lib/x86_64-linux-gnu/gconv/ISO8859-1.so
7f0814c02000-7f0814c03000 rw-p 00002000 00:00 30296              /usr/lib/x86_64-linux-gnu/gconv/ISO8859-1.so
7f0814cb0000-7f0814de9000 rw-p 00000000 00:00 0
7f0814df0000-7f0814df8000 r-xp 00000000 00:00 133598             /usr/lib/R/library/methods/libs/methods.so
7f0814df8000-7f0814dfa000 ---p 00008000 00:00 133598             /usr/lib/R/library/methods/libs/methods.so
7f0814dfa000-7f0814ff8000 ---p 0000000a 00:00 133598             /usr/lib/R/library/methods/libs/methods.so
7f0814ff8000-7f0814ff9000 r--p 00008000 00:00 133598             /usr/lib/R/library/methods/libs/methods.so
7f0814ff9000-7f0814ffa000 rw-p 00009000 00:00 133598             /usr/lib/R/library/methods/libs/methods.so
7f0815000000-7f08150ee000 rw-p 00000000 00:00 0
7f08150f0000-7f0815151000 rw-p 00000000 00:00 0
7f0815160000-7f081546e000 rw-p 00000000 00:00 0
7f0815470000-7f0815495000 r-xp 00000000 00:00 25568              /lib/x86_64-linux-gnu/libtinfo.so.5.9
7f0815495000-7f0815499000 ---p 00025000 00:00 25568              /lib/x86_64-linux-gnu/libtinfo.so.5.9
7f0815499000-7f0815694000 ---p 00000029 00:00 25568              /lib/x86_64-linux-gnu/libtinfo.so.5.9
7f0815694000-7f0815698000 r--p 00024000 00:00 25568              /lib/x86_64-linux-gnu/libtinfo.so.5.9
7f0815698000-7f0815699000 rw-p 00028000 00:00 25568              /lib/x86_64-linux-gnu/libtinfo.so.5.9
7f08156a0000-7f08156c1000 r-xp 00000000 00:00 126567             /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0
7f08156c1000-7f08156c2000 ---p 00021000 00:00 126567             /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0
7f08156c2000-7f08158c0000 ---p 00000022 00:00 126567             /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0
7f08158c0000-7f08158c1000 r--p 00020000 00:00 126567             /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0
7f08158c1000-7f08158c2000 rw-p 00021000 00:00 126567             /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0
7f08158d0000-7f08158d3000 r-xp 00000000 00:00 25452              /lib/x86_64-linux-gnu/libdl-2.23.so
7f08158d3000-7f08158d4000 ---p 00003000 00:00 25452              /lib/x86_64-linux-gnu/libdl-2.23.so
7f08158d4000-7f0815ad2000 ---p 00000004 00:00 25452              /lib/x86_64-linux-gnu/libdl-2.23.so
7f0815ad2000-7f0815ad3000 r--p 00002000 00:00 25452              /lib/x86_64-linux-gnu/libdl-2.23.so
7f0815ad3000-7f0815ad4000 rw-p 00003000 00:00 25452              /lib/x86_64-linux-gnu/libdl-2.23.so
7f0815ae0000-7f0815ae7000 r-xp 00000000 00:00 25553              /lib/x86_64-linux-gnu/librt-2.23.so
7f0815ae7000-7f0815ae8000 ---p 00007000 00:00 25553              /lib/x86_64-linux-gnu/librt-2.23.so
7f0815ae8000-7f0815ce6000 ---p 00000008 00:00 25553              /lib/x86_64-linux-gnu/librt-2.23.so
7f0815ce6000-7f0815ce7000 r--p 00006000 00:00 25553              /lib/x86_64-linux-gnu/librt-2.23.so
7f0815ce7000-7f0815ce8000 rw-p 00007000 00:00 25553              /lib/x86_64-linux-gnu/librt-2.23.so
7f0815cf0000-7f0815d09000 r-xp 00000000 00:00 25484              /lib/x86_64-linux-gnu/libz.so.1.2.8
7f0815d09000-7f0815d0a000 ---p 00019000 00:00 25484              /lib/x86_64-linux-gnu/libz.so.1.2.8
7f0815d0a000-7f0815f08000 ---p 0000001a 00:00 25484              /lib/x86_64-linux-gnu/libz.so.1.2.8
7f0815f08000-7f0815f09000 r--p 00018000 00:00 25484              /lib/x86_64-linux-gnu/libz.so.1.2.8
7f0815f09000-7f0815f0a000 rw-p 00019000 00:00 25484              /lib/x86_64-linux-gnu/libz.so.1.2.8
7f0815f10000-7f0815f1f000 r-xp 00000000 00:00 25617              /lib/x86_64-linux-gnu/libbz2.so.1.0.4
7f0815f1f000-7f0815f21000 ---p 0000f000 00:00 25617              /lib/x86_64-linux-gnu/libbz2.so.1.0.4
7f0815f21000-7f081611e000 ---p 00000011 00:00 25617              /lib/x86_64-linux-gnu/libbz2.so.1.0.4
7f081611e000-7f081611f000 r--p 0000e000 00:00 25617              /lib/x86_64-linux-gnu/libbz2.so.1.0.4
7f081611f000-7f0816120000 rw-p 0000f000 00:00 25617              /lib/x86_64-linux-gnu/libbz2.so.1.0.4
7f0816120000-7f0816141000 r-xp 00000000 00:00 25525              /lib/x86_64-linux-gnu/liblzma.so.5.0.0
7f0816141000-7f0816142000 ---p 00021000 00:00 25525              /lib/x86_64-linux-gnu/liblzma.so.5.0.0
7f0816142000-7f0816340000 ---p 00000022 00:00 25525              /lib/x86_64-linux-gnu/liblzma.so.5.0.0
7f0816340000-7f0816341000 r--p 00020000 00:00 25525              /lib/x86_64-linux-gnu/liblzma.so.5.0.0
7f0816341000-7f0816342000 rw-p 00021000 00:00 25525              /lib/x86_64-linux-gnu/liblzma.so.5.0.0
7f0816350000-7f08163be000 r-xp 00000000 00:00 25507              /lib/x86_64-linux-gnu/libpcre.so.3.13.2
7f08163be000-7f08163c0000 ---p 0006e000 00:00 25507              /lib/x86_64-linux-gnu/libpcre.so.3.13.2
7f08163c0000-7f08165be000 ---p 00000070 00:00 25507              /lib/x86_64-linux-gnu/libpcre.so.3.13.2
7f08165be000-7f08165bf000 r--p 0006e000 00:00 25507              /lib/x86_64-linux-gnu/libpcre.so.3.13.2
7f08165bf000-7f08165c0000 rw-p 0006f000 00:00 25507              /lib/x86_64-linux-gnu/libpcre.so.3.13.2
7f08165c0000-7f08165fd000 r-xp 00000000 00:00 25498              /lib/x86_64-linux-gnu/libreadline.so.6.3
7f08165fd000-7f0816605000 ---p 0003d000 00:00 25498              /lib/x86_64-linux-gnu/libreadline.so.6.3
7f0816605000-7f08167fd000 ---p 00000045 00:00 25498              /lib/x86_64-linux-gnu/libreadline.so.6.3
7f08167fd000-7f08167ff000 r--p 0003d000 00:00 25498              /lib/x86_64-linux-gnu/libreadline.so.6.3
7f08167ff000-7f0816805000 rw-p 0003f000 00:00 25498              /lib/x86_64-linux-gnu/libreadline.so.6.3
7f0816805000-7f0816806000 rw-p 00000000 00:00 0
7f0816810000-7f0816918000 r-xp 00000000 00:00 25555              /lib/x86_64-linux-gnu/libm-2.23.so
7f0816918000-7f081691a000 ---p 00108000 00:00 25555              /lib/x86_64-linux-gnu/libm-2.23.so
7f081691a000-7f0816b17000 ---p 0000010a 00:00 25555              /lib/x86_64-linux-gnu/libm-2.23.so
7f0816b17000-7f0816b18000 r--p 00107000 00:00 25555              /lib/x86_64-linux-gnu/libm-2.23.so
7f0816b18000-7f0816b19000 rw-p 00108000 00:00 25555              /lib/x86_64-linux-gnu/libm-2.23.so
7f0816b20000-7f0816b8e000 r-xp 00000000 00:00 128467             /usr/lib/libblas/libblas.so.3.6.0
7f0816b8e000-7f0816b8f000 ---p 0006e000 00:00 128467             /usr/lib/libblas/libblas.so.3.6.0
7f0816b8f000-7f0816d8d000 ---p 0000006f 00:00 128467             /usr/lib/libblas/libblas.so.3.6.0
7f0816d8d000-7f0816d8e000 r--p 0006d000 00:00 128467             /usr/lib/libblas/libblas.so.3.6.0
7f0816d8e000-7f0816d8f000 rw-p 0006e000 00:00 128467             /usr/lib/libblas/libblas.so.3.6.0
7f0816d90000-7f0816f50000 r-xp 00000000 00:00 25453              /lib/x86_64-linux-gnu/libc-2.23.so
7f0816f50000-7f0816f59000 ---p 001c0000 00:00 25453              /lib/x86_64-linux-gnu/libc-2.23.so
7f0816f59000-7f0817150000 ---p 000001c9 00:00 25453              /lib/x86_64-linux-gnu/libc-2.23.so
7f0817150000-7f0817154000 r--p 001c0000 00:00 25453              /lib/x86_64-linux-gnu/libc-2.23.so
7f0817154000-7f0817156000 rw-p 001c4000 00:00 25453              /lib/x86_64-linux-gnu/libc-2.23.so
7f0817156000-7f081715a000 rw-p 00000000 00:00 0
7f0817160000-7f0817178000 r-xp 00000000 00:00 25667              /lib/x86_64-linux-gnu/libpthread-2.23.so
7f0817178000-7f0817182000 ---p 00018000 00:00 25667              /lib/x86_64-linux-gnu/libpthread-2.23.so
7f0817182000-7f0817377000 ---p 00000022 00:00 25667              /lib/x86_64-linux-gnu/libpthread-2.23.so
7f0817377000-7f0817378000 r--p 00017000 00:00 25667              /lib/x86_64-linux-gnu/libpthread-2.23.so
7f0817378000-7f0817379000 rw-p 00018000 00:00 25667              /lib/x86_64-linux-gnu/libpthread-2.23.so
7f0817379000-7f081737d000 rw-p 00000000 00:00 0
7f0817380000-7f081767a000 r-xp 00000000 00:00 133141             /usr/lib/R/lib/libR.so
7f081767a000-7f08176a3000 ---p 002fa000 00:00 133141             /usr/lib/R/lib/libR.so
7f08176a3000-7f081787a000 ---p 00000323 00:00 133141             /usr/lib/R/lib/libR.so
7f081787a000-7f0817897000 r--p 002fa000 00:00 133141             /usr/lib/R/lib/libR.so
7f0817897000-7f08178a2000 rw-p 00317000 00:00 133141             /usr/lib/R/lib/libR.so
7f08178a2000-7f08179f4000 rw-p 00000000 00:00 0
7f0817a00000-7f0817a25000 r-xp 00000000 00:00 25651              /lib/x86_64-linux-gnu/ld-2.23.so
7f0817a25000-7f0817a26000 r-xp 00025000 00:00 25651              /lib/x86_64-linux-gnu/ld-2.23.so
7f0817a8d000-7f0817c25000 r--p 00000000 00:00 26527              /usr/lib/locale/locale-archive
7f0817c25000-7f0817c26000 r--p 00025000 00:00 25651              /lib/x86_64-linux-gnu/ld-2.23.so
7f0817c26000-7f0817c27000 rw-p 00026000 00:00 25651              /lib/x86_64-linux-gnu/ld-2.23.so
7f0817c27000-7f0817c28000 rw-p 00000000 00:00 0
7f0817c60000-7f0817c70000 rwxp 00000000 00:00 0
7f0817c70000-7f0817cf1000 rw-p 00000000 00:00 0
7f0817d00000-7f0817d64000 rw-p 00000000 00:00 0
7f0817d70000-7f0817d72000 rw-p 00000000 00:00 0
7f0817d80000-7f0817d81000 rw-p 00000000 00:00 0
7f0817d90000-7f0817d91000 rw-p 00000000 00:00 0
7f0817da0000-7f0817da1000 rw-p 00000000 00:00 0
7f0817db0000-7f0817db1000 rw-p 00000000 00:00 0
7f0817dc0000-7f0817dc1000 rw-p 00000000 00:00 0
7f0817dd0000-7f0817dd1000 rw-p 00000000 00:00 0
7f0817de0000-7f0817de1000 rw-p 00000000 00:00 0
7f0817de9000-7f0817df0000 r--s 00000000 00:00 30218              /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache 7f0817df0000-7f0817df1000 rw-p 00000000 00:00 0
7f0817df3000-7f0817df4000 r--p 00000000 00:00 133238             /usr/lib/R/library/translations/en/LC_MESSAGES/R.mo 7fffecc89000-7fffed489000 rw-p 00000000 00:00 0                  [stack]
7fffed965000-7fffed966000 r-xp 00000000 00:00 0                  [vdso]
Aborted (core dumped)
dleutnant commented 5 years ago
  1. How do you compile SWMM5? As shared library or executable?
  2. Did you check that the compiled SWMM5 executable works (e.g. with the examples shipped with SWMM5 for windows, WITHOUT R, just the terminal)?
  3. Could you please remove the current swmmr package (remove.packages("swmmr")?
  4. Does install.packages("swmmr", type = "source") show you any errors?
  5. Could you please reproduce the section Initiate a SWMM run and retrieve simulation results from here (hint: don't forget to set the correct path to your freshly compiled SWMM5 executable)
ctfysh commented 5 years ago
  1. I compiled SWMM5 just like the gist said, as executable not shared library because I do not know how to use shared library with swmmr.
  2. The compiled SWMM5 is executalbe, it can produce a *.out file.
  3. I removed the current swmmr package with remove.packages("swmmr") just now.
  4. When I reinstall the package with install.packages("swmmr", type = "source"), it showed no errors but some warnings as follows:
> install.packages("swmmr", type = "source")
Installing package into ‘/mnt/d/R/x86_64-pc-linux-gnu-library’
(as ‘lib’ is unspecified)
trying URL 'https://mirrors.tuna.tsinghua.edu.cn/CRAN/src/contrib/swmmr_0.8.1.tar.gz'
Content type 'application/x-gzip' length 259357 bytes (253 KB)
==================================================
downloaded 253 KB

* installing *source* package ‘swmmr’ ...
** package ‘swmmr’ successfully unpacked and MD5 sums checked
** libs
g++  -I"/usr/share/R/include" -DNDEBUG  -I"/mnt/d/R/x86_64-pc-linux-gnu-library/Rcpp/include"    -fpic  -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g  -c RcppExports.cpp -o RcppExports.o
g++  -I"/usr/share/R/include" -DNDEBUG  -I"/mnt/d/R/x86_64-pc-linux-gnu-library/Rcpp/include"    -fpic  -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g  -c swmm5_iface.cpp -o swmm5_iface.o
swmm5_iface.cpp: In function ‘Rcpp::List OpenSwmmOutFile(const char*)’:
swmm5_iface.cpp:59:39: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
   fread(&offset0, RECORDSIZE, 1, Fout);
                                       ^
swmm5_iface.cpp:60:40: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
   fread(&StartPos, RECORDSIZE, 1, Fout);
                                        ^
swmm5_iface.cpp:61:45: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
   fread(&SWMM_Nperiods, RECORDSIZE, 1, Fout);
                                             ^
swmm5_iface.cpp:62:39: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
   fread(&errCode, RECORDSIZE, 1, Fout);
                                       ^
swmm5_iface.cpp:63:38: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
   fread(&magic2, RECORDSIZE, 1, Fout);
                                      ^
swmm5_iface.cpp:67:38: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
   fread(&magic1, RECORDSIZE, 1, Fout);
                                      ^
swmm5_iface.cpp:84:44: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
   fread(&SWMM_version, RECORDSIZE, 1, Fout);
                                            ^
swmm5_iface.cpp:85:46: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
   fread(&SWMM_FlowUnits, RECORDSIZE, 1, Fout);
                                              ^
swmm5_iface.cpp:86:46: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
   fread(&SWMM_Nsubcatch, RECORDSIZE, 1, Fout);
                                              ^
swmm5_iface.cpp:87:43: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
   fread(&SWMM_Nnodes, RECORDSIZE, 1, Fout);
                                           ^
swmm5_iface.cpp:88:43: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
   fread(&SWMM_Nlinks, RECORDSIZE, 1, Fout);
                                           ^
swmm5_iface.cpp:89:45: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
   fread(&SWMM_Npolluts, RECORDSIZE, 1, Fout);
                                             ^
swmm5_iface.cpp:99:49: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
     fread(&IDsubcatch[i-1], RECORDSIZE, 1, Fout);
                                                 ^
swmm5_iface.cpp:108:46: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
     fread(&IDnodes[i-1], RECORDSIZE, 1, Fout);
                                              ^
swmm5_iface.cpp:117:46: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
     fread(&IDlinks[i-1], RECORDSIZE, 1, Fout);
                                              ^
swmm5_iface.cpp:126:46: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
     fread(&IDpolls[i-1], RECORDSIZE, 1, Fout);
                                              ^
swmm5_iface.cpp:138:46: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
     fread(&SubcatchVars, RECORDSIZE, 1, Fout); // # Subcatch variables
                                              ^
swmm5_iface.cpp:140:42: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
     fread(&NodeVars, RECORDSIZE, 1, Fout);     // # Node variables
                                          ^
swmm5_iface.cpp:142:42: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
     fread(&LinkVars, RECORDSIZE, 1, Fout);     // # Link variables
                                          ^
swmm5_iface.cpp:144:41: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
     fread(&SysVars, RECORDSIZE, 1, Fout);     // # System variables
                                         ^
swmm5_iface.cpp:149:52: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
     fread(&SWMM_StartDate, sizeof(double), 1, Fout);
                                                    ^
swmm5_iface.cpp:150:49: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
     fread(&SWMM_ReportStep, RECORDSIZE, 1, Fout);
                                                 ^
swmm5_iface.cpp: In function ‘Rcpp::NumericVector GetSwmmResult(int, int, int)’:
swmm5_iface.cpp:207:48: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
     fread(&resultvec[i-1], RECORDSIZE, 1, Fout);
                                                ^
g++ -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions -Wl,-z,relro -o swmmr.so RcppExports.o swmm5_iface.o -L/usr/lib/R/lib -lR
installing to /mnt/d/R/x86_64-pc-linux-gnu-library/swmmr/libs
** R
** inst
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
*** copying figures
** building package indices
** installing vignettes
** testing if installed package can be loaded
* DONE (swmmr)
  1. I reproduced the example code line by line and everything is ok until when running results <- read_out(files$out, iType = 3, vIndex = c(1, 4)) the same error *** buffer overflow detected *** produced again.
dleutnant commented 5 years ago

OK, I can reproduce the error. It seems that the issue is related to g++ (or at least with its default compiler flags...). By using clang++ the .out file is read without overflows. Here's what I did:

  1. install clang and its dependencies: sudo apt-get install clang
  2. create Makevars file (more info here) in the directory ~/.R
  3. edit Makevars sudo vi ~/.R/Makevars with the following content:
CC=clang -Qunused-arguments
CXX=clang++ -Qunused-arguments
  1. reinstall swmmr: install.packages("swmmr", type = "source"). You can now check if clang is used. The output should clearly indicate "clang++" :

    * installing *source* package ‘swmmr’ ...
    ** package ‘swmmr’ successfully unpacked and MD5 sums checked
    ** libs
    clang++ -Qunused-arguments -I/usr/share/R/include -DNDEBUG   -I"/usr/local/lib/R/site-library/Rcpp/include"   -fpic  -g -O2 -fdebug-prefix-map=/build/r-base-3.3.3=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g  -c RcppExports.cpp -o RcppExports.o
    clang++ -Qunused-arguments -I/usr/share/R/include -DNDEBUG   -I"/usr/local/lib/R/site-library/Rcpp/include"   -fpic  -g -O2 -fdebug-prefix-map=/build/r-base-3.3.3=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g  -c swmm5_iface.cpp -o swmm5_iface.o
  2. reproduce the section Initiate a SWMM run and retrieve simulation results from here (hint: don't forget to set the correct path to your freshly compiled SWMM5 executable)

  3. (optional) Delete Makevars file as it could have an impact on other package builds (s. here)

The buffer overflow error should be gone now. Could you please confirm?

ctfysh commented 5 years ago

@dleutnant OK, the buffer overflow error is really gone after I do so. Thanks for your help!