Segmentation fault in FromFile due to RASTER=TRUE
Summary
Bug report through OPAL mailing list:
Dear all,
I’m trying to use the FROMFILE option for scanning parameters in the sampler.
The files work fine for uniform distributions, but when I introduce FROMFILE,
I get the message, that
Error{1}> *** User error detected by function "FromFile()"
Error{1}> Couldn't find the dvar 'VQ1B' in the file './samplefile_corV3.dat'
Error{1}> Couldn't find the dvar 'VQ1B' in the file './samplefile_corV3.dat'
That happens, when I write ‘VQ1B’ – which is not in the manual.
Using the manual and writing VQ1B I get a segmentation fault.
[dinux9:59198] *** Process received signal ***
[dinux9:59198] Signal: Segmentation fault (11)
[dinux9:59198] Signal code: Address not mapped (1)
[dinux9:59198] Failing at address: (nil)
[dinux9:59198] [ 0] /lib64/libpthread.so.0(+0x10c10)[0x7fe6e78c4c10]
[dinux9:59198] [ 1] opal(_ZN8FromFile8allocateERKN5boost10shared_ptrI12CmdArgumentsEERKN4Comm8Bundle_tE+0x1190)[0x898ab0]
[dinux9:59198] [ 2] opal(_ZN9SampleCmd7executeEv+0x2d41)[0x8a16d1]
[dinux9:59198] [ 3] opal(_ZNK10OpalParser7executeEP6ObjectRKSs+0x35)[0x7b0e25]
[dinux9:59198] [ 4] opal(_ZNK10OpalParser11parseActionER9Statement+0x120)[0x7b4bc0]
[dinux9:59198] [ 5] opal(_ZNK10OpalParser5parseER9Statement+0x1cf)[0x7b541f]
[dinux9:59198] [ 6] opal(_ZNK10OpalParser3runEv+0x2c)[0x7b0aec]
[dinux9:59198] [ 7] opal(_ZNK10OpalParser3runEP11TokenStream+0x70)[0x7b5d40]
[dinux9:59198] [ 8] opal(main+0xf75)[0x6ff155]
[dinux9:59198] [ 9] /lib64/libc.so.6(__libc_start_main+0xf5)[0x7fe6e5c2c725]
[dinux9:59198] [10] opal(_start+0x29)[0x70b039]
[dinux9:59198] *** End of error message ***
2019_diag_EMF_corV3_sampler.in samplefile_corV3.dat
What is the current bug behavior?
Segmentation fault.
What is the expected correct behavior?
No segmentation fault.
Possible fixes
The reason is the RASTER=TRUE
option which increases the number of required samples in the FROMFILE
file.
See in line 335 in SampleCmd.cpp
. Hence nSamples > globalSize_m
(globalSize_m
is the number of lines in the provided FROMFILE file).
It can be fixed by
nSamples = std::min(nSamples, globalSize_m);