Summary: | Проблема со сравнением версий содержащих буквы | ||||||
---|---|---|---|---|---|---|---|
Product: | Sisyphus | Reporter: | Kirill A. Shutemov <kas> | ||||
Component: | librpm | Assignee: | placeholder <placeholder> | ||||
Status: | ASSIGNED --- | QA Contact: | qa-sisyphus | ||||
Severity: | normal | ||||||
Priority: | P2 | CC: | arseny, dottedmag, erthad, glebfm, imz, ldv, led, n3npq, placeholder, vt | ||||
Version: | unstable | ||||||
Hardware: | all | ||||||
OS: | Linux | ||||||
Attachments: |
|
Вроде бы все считают, что надо этот патч приложить. (В ответ на комментарий №1)
> Вроде бы все считают, что надо этот патч приложить.
Исправлять нужно, но ИМХО не этим патчем.
А что с этим патчем не так? А какая версия должна быть больше, 1a или 1.a? Нет ответа => лучше не патчить. Очевидно, что 1a > 1.a. tracked at https://bugs.launchpad.net/rpm/+bug/911038 |
Created attachment 3212 [details] fix for rpmvercmp Словил забавный баг(фичу?) в rpmvercmp. Есть две версии "1.a" и "1a". rpmvercmp считает их равными! rpm сравнивает эти версии следующим образом (упрощено): 1. Отбрасывает из начала обоих строк символы не являющиеся буквами или цифрами (!isalnum) в начале строк. В данном случае в обоих строках таких символов нет. 2. Выбирает из обоих строк максимальное количество количество цифр и сравнивает, как числа. 1 == 1, т.е. на данном этапе версии равны. 3. Далее сравнивает оставшиеся части версий: ".a" и "a". 4. Тут цикл начинается с начала. Опять отбрасываются все символы не являющиеся буквами и цифрами. Остаётся "a" и "a". Они, очевидно, являются равными. Я считаю такое поведение ошибочным. Отбрасывать символы не являющиеся буквами или цифрами следует только, если в обоих строках они есть. Как вы считаете?