[sword-devel] Module version numbers
Jaak Ristioja
jaak at ristioja.ee
Tue Sep 25 06:02:31 EDT 2018
> Very long version strings can only crash it if this runs out of memory.
Sorry, this was an incorrect statement. The POSIX Programmers Manual for
atoi(3p) states:
If the value cannot be represented, the behavior is undefined.
Hence it can also crash / overwrite random memory or have other adverse
effects besides just returning an undefined value.
J
On 25.09.2018 12:56, Jaak Ristioja wrote:
>> 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?
>> Would SWORD crash with a buffer overflow were it to encounter an
> inordinately long Version?
>
> The relevant code to parse the version string is in the SWVersion
> constructor:
>
> SWVersion::SWVersion(const char *version) {
> char *buf = new char[ strlen(version) + 1 ];
> char *tok;
> major = minor = minor2 = minor3 = -1;
>
> strcpy(buf, version);
> tok = strtok(buf, ".");
> if (tok)
> major = atoi(tok);
> tok = strtok(0, ".");
> if (tok)
> minor = atoi(tok);
> tok = strtok(0, ".");
> if (tok)
> minor2 = atoi(tok);
> tok = strtok(0, ".");
> if (tok)
> minor3 = atoi(tok);
> delete [] buf;
> }
>
> Very long version strings can only crash it if this runs out of memory.
> Other than that, it will just return an incorrect version. There are no
> limits to the number of dot separators, but only up to 4 version
> components separated by dots are actually parsed. AFAIK, the behavior of
> atoi() is undefined for invalid input. On my system, the results are as
> follows:
>
> "9.1" -> 9.1
> "99.1" -> 99.1
> "999.1" -> 999.1
> "9999.1" -> 9999.1
> "99999.1" -> 99999.1
> "999999.1" -> 999999.1
> "9999999.1" -> 9999999.1
> "99999999.1" -> 99999999.1
> "999999999.1" -> 999999999.1
> "9999999999.1" -> 1410065407.1
> "99999999999.1" -> 1215752191.1
> "999999999999.1" -> -727379969.1
> "9999999999999.1" -> 1316134911.1
> "99999999999999.1" -> 276447231.1
> "999999999999999.1" -> -1530494977.1
> "9999999999999999.1" -> 1874919423.1
> "99999999999999999.1" -> 1569325055.1
> "999999999999999999.1" -> -1486618625.1
> "9999999999999999999.1" -> -1.1
> "99999999999999999999.1" -> -1.1
>
>
> J
>
> On 25.09.2018 12:03, David Haslam wrote:
>> Ignoring the spurious SwordVersion hit, it seems that the string after the dash is a date in six digit format.
>>
>> IMHO, these modules should simply be re-issued with the dates recorded in the respective History key.
>>
>> It's not worth the effort to make the API parse these as they are now.
>> The dash is a nonconformance to what should be in the Version key.
>>
>> 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?
>> Would SWORD crash with a buffer overflow were it to encounter an inordinately long Version?
>>
>> Best regards,
>>
>> David
>>
>> Sent from ProtonMail Mobile
>>
>> On Tue, Sep 25, 2018 at 09:44, Jaak Ristioja <jaak at ristioja.ee> wrote:
>>
>>> Hello!
>>>
>>> Most modules include version numbers matching the regular expression
>>>
>>> ^[0-9]+(.[0-9]+)*$
>>>
>>> However, looking at the .conf files, there are version fields with
>>> values also containing dashes:
>>>
>>> ~/.sword/mods.d $ grep -E 'Version=.*-' *
>>> 2tgreek.conf:Version=2.7-120109
>>> invstrongsrealgreek.conf:Version=1.4-090107
>>> jesermons.conf:SwordVersion=2017-05-24
>>> strongsrealgreek.conf:Version=1.5-150704
>>> tischmorph.conf:Version=2.7-120109
>>>
>>> How should these be interpreted? Should 1.2-3.4 be interpreted as
>>> (1).(2-3).(4) or (1.2)-(3.4)? It seems that SWVersion interprets such as
>>> just 1.2.4 (without the -3 entirely).
>>>
>>> God bless!
>>> J
>>>
>>> _______________________________________________
>>> sword-devel mailing list: sword-devel at crosswire.org
>>> http://www.crosswire.org/mailman/listinfo/sword-devel
>>> Instructions to unsubscribe/change your settings at above page
>>>
>>>
>>> _______________________________________________
>>> sword-devel mailing list: sword-devel at crosswire.org
>>> http://www.crosswire.org/mailman/listinfo/sword-devel
>>> Instructions to unsubscribe/change your settings at above page
>
>
> _______________________________________________
> sword-devel mailing list: sword-devel at crosswire.org
> http://www.crosswire.org/mailman/listinfo/sword-devel
> Instructions to unsubscribe/change your settings at above page
>
More information about the sword-devel
mailing list