<div>Thanks Peter,</div>
<div>
<br />
</div>
<div>We should therefore also&nbsp;encourage Karl to review and update any such modules in the Xiphos repository.</div>
<div>
<br />
</div>
<div>The reason I added my aside was that version values are clearly used for comparison purposes to determine whether a module has been updated.</div>
<div>Version is&nbsp;one of maybe only a few configuration&nbsp;keys upon which calculations are made.</div>
<div>This logically led me to pose the question about potential buffer overflows, even though I'm not part of the SWORD coding team.</div>
<div>cf.&nbsp;My awareness of what can be exploited from a buffer overflow or the like has been honed by 13 years of watching the Security Now! webcasts on twit.tv</div>
<div>
<br />
</div>
<div>Further aside: How does JSword process the same key?</div>
<div>
<br />
</div>
<div>David</div>
<div>
<br />
</div>
<div id="protonmail_mobile_signature_block">Sent from ProtonMail Mobile</div>
<div>
<br />
<div>
<div>
<br />
</div>On Tue, Sep 25, 2018 at 11:54, Peter Von Kaehne &lt;<a href="mailto:refdoc@gmx.net" class="">refdoc@gmx.net</a>&gt; wrote:</div>
<blockquote class="protonmail_quote" type="cite">I think there are two aspects then - version numbers should be correct in current modules. I think the bulk of the modules you listed are Xiphos, not CrossWire, but at least one is issued by CrossWire, maybe more. I will fix CrossWire's set.
<br />
<br />The other is - wrong version numbers should not crash the engine or produce unreliable/undefined results. Or at least the engine should go down with a decent error message. In essence all places where wrong module conf file entries can cause grief in
        the engine, I guess some level of sanity checking should happen - Particularly if we want to encourage other publishers to take up offering repositories.
<br />
<br />Peter
<br />
<br />
<br />
<br />&gt; Gesendet: Dienstag, 25. September 2018 um 10:56 Uhr
<br />&gt; Von: "Jaak Ristioja" &lt;jaak@ristioja.ee&gt;
<br />&gt; An: sword-devel@crosswire.org
<br />&gt; Betreff: Re: [sword-devel] Module version numbers
<br />&gt;
<br />&gt; &gt; Aside: Are there any limits to the number of dot separators in the
<br />&gt; Version value, or to the number of digits in total or in any part?
<br />&gt; &gt; Would SWORD crash with a buffer overflow were it to encounter an
<br />&gt; inordinately long Version?
<br />&gt;
<br />&gt; The relevant code to parse the version string is in the SWVersion
<br />&gt; constructor:
<br />&gt;
<br />&gt; SWVersion::SWVersion(const char *version) {
<br />&gt; char *buf = new char[ strlen(version) + 1 ];
<br />&gt; char *tok;
<br />&gt; major = minor = minor2 = minor3 = -1;
<br />&gt;
<br />&gt; strcpy(buf, version);
<br />&gt; tok = strtok(buf, ".");
<br />&gt; if (tok)
<br />&gt; major = atoi(tok);
<br />&gt; tok = strtok(0, ".");
<br />&gt; if (tok)
<br />&gt; minor = atoi(tok);
<br />&gt; tok = strtok(0, ".");
<br />&gt; if (tok)
<br />&gt; minor2 = atoi(tok);
<br />&gt; tok = strtok(0, ".");
<br />&gt; if (tok)
<br />&gt; minor3 = atoi(tok);
<br />&gt; delete [] buf;
<br />&gt; }
<br />&gt;
<br />&gt; Very long version strings can only crash it if this runs out of memory.
<br />&gt; Other than that, it will just return an incorrect version. There are no
<br />&gt; limits to the number of dot separators, but only up to 4 version
<br />&gt; components separated by dots are actually parsed. AFAIK, the behavior of
<br />&gt; atoi() is undefined for invalid input. On my system, the results are as
<br />&gt; follows:
<br />&gt;
<br />&gt; "9.1" -&gt; 9.1
<br />&gt; "99.1" -&gt; 99.1
<br />&gt; "999.1" -&gt; 999.1
<br />&gt; "9999.1" -&gt; 9999.1
<br />&gt; "99999.1" -&gt; 99999.1
<br />&gt; "999999.1" -&gt; 999999.1
<br />&gt; "9999999.1" -&gt; 9999999.1
<br />&gt; "99999999.1" -&gt; 99999999.1
<br />&gt; "999999999.1" -&gt; 999999999.1
<br />&gt; "9999999999.1" -&gt; 1410065407.1
<br />&gt; "99999999999.1" -&gt; 1215752191.1
<br />&gt; "999999999999.1" -&gt; -727379969.1
<br />&gt; "9999999999999.1" -&gt; 1316134911.1
<br />&gt; "99999999999999.1" -&gt; 276447231.1
<br />&gt; "999999999999999.1" -&gt; -1530494977.1
<br />&gt; "9999999999999999.1" -&gt; 1874919423.1
<br />&gt; "99999999999999999.1" -&gt; 1569325055.1
<br />&gt; "999999999999999999.1" -&gt; -1486618625.1
<br />&gt; "9999999999999999999.1" -&gt; -1.1
<br />&gt; "99999999999999999999.1" -&gt; -1.1
<br />&gt;
<br />&gt;
<br />&gt; J
<br />&gt;
<br />&gt; On 25.09.2018 12:03, David Haslam wrote:
<br />&gt; &gt; Ignoring the spurious SwordVersion hit, it seems that the string after the dash is a date in six digit format.
<br />&gt; &gt;
<br />&gt; &gt; IMHO, these modules should simply be re-issued with the dates recorded in the respective History key.
<br />&gt; &gt;
<br />&gt; &gt; It's not worth the effort to make the API parse these as they are now.
<br />&gt; &gt; The dash is a nonconformance to what should be in the Version key.
<br />&gt; &gt;
<br />&gt; &gt; Aside: Are there any limits to the number of dot separators in the Version value, or to the number of digits in total or in any part?
<br />&gt; &gt; Would SWORD crash with a buffer overflow were it to encounter an inordinately long Version?
<br />&gt; &gt;
<br />&gt; &gt; Best regards,
<br />&gt; &gt;
<br />&gt; &gt; David
<br />&gt; &gt;
<br />&gt; &gt; Sent from ProtonMail Mobile
<br />&gt; &gt;
<br />&gt; &gt; On Tue, Sep 25, 2018 at 09:44, Jaak Ristioja &lt;jaak@ristioja.ee&gt; wrote:
<br />&gt; &gt;
<br />&gt; &gt;&gt; Hello!
<br />&gt; &gt;&gt;
<br />&gt; &gt;&gt; Most modules include version numbers matching the regular expression
<br />&gt; &gt;&gt;
<br />&gt; &gt;&gt; ^[0-9]+(.[0-9]+)*$
<br />&gt; &gt;&gt;
<br />&gt; &gt;&gt; However, looking at the .conf files, there are version fields with
<br />&gt; &gt;&gt; values also containing dashes:
<br />&gt; &gt;&gt;
<br />&gt; &gt;&gt; ~/.sword/mods.d $ grep -E 'Version=.*-' *
<br />&gt; &gt;&gt; 2tgreek.conf:Version=2.7-120109
<br />&gt; &gt;&gt; invstrongsrealgreek.conf:Version=1.4-090107
<br />&gt; &gt;&gt; jesermons.conf:SwordVersion=2017-05-24
<br />&gt; &gt;&gt; strongsrealgreek.conf:Version=1.5-150704
<br />&gt; &gt;&gt; tischmorph.conf:Version=2.7-120109
<br />&gt; &gt;&gt;
<br />&gt; &gt;&gt; How should these be interpreted? Should 1.2-3.4 be interpreted as
<br />&gt; &gt;&gt; (1).(2-3).(4) or (1.2)-(3.4)? It seems that SWVersion interprets such as
<br />&gt; &gt;&gt; just 1.2.4 (without the -3 entirely).
<br />&gt; &gt;&gt;
<br />&gt; &gt;&gt; God bless!
<br />&gt; &gt;&gt; J
<br />&gt; &gt;&gt;
<br />&gt; &gt;&gt; _______________________________________________
<br />&gt; &gt;&gt; sword-devel mailing list: sword-devel@crosswire.org
<br />&gt; &gt;&gt; http://www.crosswire.org/mailman/listinfo/sword-devel
<br />&gt; &gt;&gt; Instructions to unsubscribe/change your settings at above page
<br />&gt; &gt;&gt;
<br />&gt; &gt;&gt;
<br />&gt; &gt;&gt; _______________________________________________
<br />&gt; &gt;&gt; sword-devel mailing list: sword-devel@crosswire.org
<br />&gt; &gt;&gt; http://www.crosswire.org/mailman/listinfo/sword-devel
<br />&gt; &gt;&gt; Instructions to unsubscribe/change your settings at above page
<br />&gt;
<br />&gt;
<br />&gt; _______________________________________________
<br />&gt; sword-devel mailing list: sword-devel@crosswire.org
<br />&gt; http://www.crosswire.org/mailman/listinfo/sword-devel
<br />&gt; Instructions to unsubscribe/change your settings at above page
<br />&gt;
<br />
<br />_______________________________________________
<br />sword-devel mailing list: sword-devel@crosswire.org
<br />http://www.crosswire.org/mailman/listinfo/sword-devel
<br />Instructions to unsubscribe/change your settings at above page
<br />
</blockquote>
</div>