vermaseren / form

The FORM project for symbolic manipulation of very big expressions
GNU General Public License v3.0
1.14k stars 136 forks source link

[parform] reading a bracket may crash when the expression doesn't fit in the scratch buffer #166

Open tueda opened 7 years ago

tueda commented 7 years ago

The issue #165 remains for parform. This must be a different bug because parform doesn't use bracket indices.

#:MaxTermSize 200
#:ScratchSize 12800
CF f,g;
S n;
L F = <f(1)>+...+<f(100)>;
multiply <g(1)>+...+<g(100)>;
*B+ f;
B- f;  * <-- (1) ENABLED
ModuleOption noparallel;
.sort
id g(n?) = F[f(n)];
P;
*ModuleOption noparallel;  * <-- (2)
.end

which crashes like

ParFORM 4.1 (Jan 14 2017, v4.1-20131025-291-g58f170c) 64-bits 3 workers  Run: Sat Jan 14 18:01:40 2017
    #:MaxTermSize 200
    #:ScratchSize 12800
    CF f,g;
    S n;
    L F = <f(1)>+...+<f(100)>;
    multiply <g(1)>+...+<g(100)>;
    *B+ f;
    B- f;  * <-- (1) ENABLED
    ModuleOption noparallel;
    .sort

Time =       0.00 sec    Generated terms =      10000
               F         Terms in output =      10000
                         Bytes used      =     243216
    id g(n?) = F[f(n)];
    P;
    *ModuleOption noparallel;  * <-- (2)
    .end
=== Fatal error at parallel.c:3520
Program terminating in process 1 at test.frm Line 12 -->
=== Fatal error at parallel.c:3520
=== Fatal error at parallel.c:3520
Program terminating in process 3 at test.frm Line 12 -->
Program terminating in process 2 at test.frm Line 12 -->

Enabling line (2) or increasing the scratch size (~ 16400 in this case) avoid the bug.

vermaseren commented 7 years ago

Hi Takahiro,

To be honest, I have never used parform and I have never gotten myself involved in the code. I do know that it must be a bit different how parform has to pick up brackets. But that is all. Maybe it is here similar to how the fix had to be before: the picking up of the brackets interferes with the regular reading of the same expression and somewhere it is assumed in the distribution of the terms or brackets that the position does not change.

For now I cannot look at it.

Cheers

Jos

On 14 jan. 2017, at 18:03, Takahiro Ueda notifications@github.com wrote:

The issue #165 https://github.com/vermaseren/form/issues/165 remains for parform. This must be a different bug because parform doesn't have bracket indices.

:MaxTermSize 200

:ScratchSize 12800

CF f,g; S n; L F = <f(1)>+...+<f(100)>; multiply <g(1)>+...+<g(100)>; B+ f; B- f; <-- (1) ENABLED ModuleOption noparallel; .sort id g(n?) = F[f(n)]; P; ModuleOption noparallel; <-- (2) .end which crashes like

ParFORM 4.1 (Jan 14 2017, v4.1-20131025-291-g58f170c) 64-bits 3 workers Run: Sat Jan 14 18:01:40 2017

:MaxTermSize 200

#:ScratchSize 12800
CF f,g;
S n;
L F = <f(1)>+...+<f(100)>;
multiply <g(1)>+...+<g(100)>;
*B+ f;
B- f;  * <-- (1) ENABLED
ModuleOption noparallel;
.sort

Time = 0.00 sec Generated terms = 10000 F Terms in output = 10000 Bytes used = 243216 id g(n?) = F[f(n)]; P; ModuleOption noparallel; <-- (2) .end === Fatal error at parallel.c:3520 Program terminating in process 1 at test.frm Line 12 --> === Fatal error at parallel.c:3520 === Fatal error at parallel.c:3520 Program terminating in process 3 at test.frm Line 12 --> Program terminating in process 2 at test.frm Line 12 --> — You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/vermaseren/form/issues/166, or mute the thread https://github.com/notifications/unsubscribe-auth/AFLxEq5b3cGaR0b1kCfHDG-TayvR2ftFks5rSP_MgaJpZM4LjrfF.