<div>Hi!</div><div> </div><div>  Possible dubl</div><div> </div><div><div>https://github.com/modula3/cm3/issues/1044</div><div>{<!-- -->{<!-- -->{<!-- -->{<!-- --></div><div> </div><div>{<!-- -->{<!-- --></div><div>mikanystrom-intel commented:</div><div> </div><div>I think I found a bug in RegEx.m3. Can someone please confirm?</div><div> </div><div>If you use the "start" feature, the code can overflow on line 576:</div><div> </div><div>574       ELSE</div><div>575         str_idx := start;</div><div>576         str_max := MIN(start + len, textlen)</div><div>577       END;</div><div>because the default value of len is LAST(CARDINAL):</div><div> </div><div>PROCEDURE Execute (READONLY pat : Pattern;</div><div>data : TEXT;</div><div>start: CARDINAL := 0;</div><div>len : CARDINAL := LAST(CARDINAL);</div><div>mem : REF Memory := NIL ): INTEGER;</div><div> </div><div>start + len wraps and goes negative.</div><div> </div><div>str_max is a CARDINAL so we get a checked runtime error (range error) on line 576.</div><div> </div><div>I find the behavior surprising, undocumented, and wrong. Am I right?</div><div>}}</div><div> </div><div> </div><div>{<!-- -->{<!-- --></div><div>VictorMiasnikov commented:<br /> </div><div>As "first impression":</div><div> </div><div>} I find the behavior surprising, undocumented</div><div> </div><div>IMHO, it is surprising, but ( unfortunately) documented. ;-(</div><div> </div><div>} overflow on line 576</div><div> </div><div>Possible solution:</div><div> </div><div>VAR Diff_S_TL := textlen - start ;</div><div> </div><div>And later compare Diff_S_TL with len</div><div> </div><div>  . . .</div><div> </div><div>P.S. And we always can use "long arithmetic"</div><div> </div><div>( L.A. has be already implemented in cm3 Modula-3 "ecosystem" )</div><div>}}</div><div> </div><div>}}}}</div><div> </div><div> </div></div><div> </div><div>Best regards, Victor Miasnikov</div>