Page 3 of 16

Re: Путь приложения

Posted: Sun Nov 20, 2016 1:24 am
by Leency
Pathoswithin wrote:А разве размер изначально где-то был объявлен? В коде было где как: и 1024, и 4096, и даже 260. Теперь везде одна константа. Где приложения работали, там по прежнему работают.
Одна константа - это хорошо.
Serge wrote:Это от приложения зависит. Главное, что не падало в ядре с утечкой памяти. Я напомню, что все программы на Си/Си++ обязательно получают путь к приложению. Независимо от того, нужен он им, или нет. Т.е. все эти программы в данный момент уязвимы.
Можно подробнее об этой проблеме?
Она есть в данный момент у программ на С--, Fplay, Kosilka, updf... ? Чем эта проблема опасна?

Re: Путь приложения

Posted: Sun Nov 20, 2016 2:06 am
by Pathoswithin
На практике нужно хорошо постараться, чтоб получить путь длиннее 1024 байт, потому проблема скорей теоретическая.

Re: Путь приложения

Posted: Sun Nov 20, 2016 3:10 pm
by Mega_Myr
Мне кажется, что ограничение на длину пути может быть только для определенных приложений для совместимости с различными ОС, файловыми системами и функции "записи" iso-образов. Потому как большинство файловых систем не имеет ограничений на длину пути. И для приложений Колибри его теоретически тоже может не быт.
Pathoswithin wrote:На практике нужно хорошо постараться, чтоб получить путь длиннее 1024 байт, потому проблема скорей теоретическая.
Я с этой проблемой столкнулся в далёком 2003 году, когда собственноручно награбленную коллекцию mp3-шек на болванку (оптический диск) записывал. Тогда я еще не пользовался ID3-тегами (а возможно и не знал), и как можно больше данных в имена файлов и папок помещал. :mrgreen:

Re: Путь приложения

Posted: Sun Nov 20, 2016 6:25 pm
by Ray
Pathoswithin wrote:И я действительно не признаю косяков
Даже доказывать не надо.
Pathoswithin wrote:На практике нужно хорошо постараться, чтоб получить путь длиннее 1024 байт, потому проблема скорей теоретическая.
Вероятностное программирование: если вероятность проявления бага мала можно считать, что его нет. © Pathoswithin

Re: Путь приложения

Posted: Sun Nov 20, 2016 7:57 pm
by Pathoswithin
Да, я консервативен и люблю вероятностное программирование. Жаль, что его эпоха миновала, и в наше время можно считать, что бага нет, если он не сильно мешает.

Re: "Ночные" сборки KolibriOS

Posted: Wed Nov 23, 2016 2:12 am
by Leency
Теперь и Quake не работает!

Мне все меньше нравится сердечко в начале пути.

Re: "Ночные" сборки KolibriOS

Posted: Wed Nov 23, 2016 2:33 am
by Pathoswithin
... а мне всё меньше нравятся высокоуровневые языки. Что они там с этой строкой вытворяют?

Re: "Ночные" сборки KolibriOS

Posted: Wed Nov 23, 2016 2:48 am
by Leency
Нет никакой магии, у низкоуровневых должна быть та же самая проблема.

Вангую, что они берут полный путь программы, обрезают имя и добавляют имя ресурса, который лежит по соседству в этой же папки. Пытаются его загрузить и обламываются.

Re: "Ночные" сборки KolibriOS

Posted: Wed Nov 23, 2016 2:50 am
by Pathoswithin
Ассемблерные программы именно так и делают, и вроде не обламываются.

Re: "Ночные" сборки KolibriOS

Posted: Wed Nov 23, 2016 2:53 am
by Leency
У меня была проблема в С--, давай я завтра тебе зарепорчу.

Re: "Ночные" сборки KolibriOS

Posted: Wed Nov 23, 2016 2:55 am
by akron1
Я предполагаю, что некоторые программы просто соединяют argv[0] и остальные параметры в одну строку, а затем делают парсинг этой строки. При этом, управляющие символы, к которым относится "сердечко" приравниваются к пробелам. И получается, что argv[0] = "", а путь приложения оказывается в argv[1]. Возможные решения:
- Сделать UTF-8 без маркера, по умолчанию.
- Записывать юникодный argv[0] не в 0x20, а куда-нибудь в другое место. Если свободных полей в заголовке исполняемого файла больше не осталось, то есть еще сигнатура "MENUET01" -- два dword'а с адресами 0x0 и 0x4.

Re: "Ночные" сборки KolibriOS

Posted: Wed Nov 23, 2016 8:25 am
by Serge
И получается, что argv[0] = "", а путь приложения оказывается в argv[1]
Этого точно не получается. Путь не может попасть в аргументы командной строки.

Re: "Ночные" сборки KolibriOS

Posted: Wed Nov 23, 2016 8:28 am
by Serge
Pathoswithin wrote:... а мне всё меньше нравятся высокоуровневые языки. Что они там с этой строкой вытворяют?
Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость.

Re: "Ночные" сборки KolibriOS

Posted: Wed Nov 23, 2016 10:04 am
by Siemargl
В newlib захаркодено 1024 байта на путь.

И 64 открытых файла на программу (это так, к слову).

Re: "Ночные" сборки KolibriOS

Posted: Wed Nov 23, 2016 12:10 pm
by akron1
Serge wrote:Этого точно не получается. Путь не может попасть в аргументы командной строки.
Пожалуй, что да.
Но всё равно интересно, какое дело приложению может быть до первого байта.
Leency wrote:Вангую, что они берут полный путь программы, обрезают имя и добавляют имя ресурса, который лежит по соседству в этой же папки. Пытаются его загрузить и обламываются.
Вот алгоритм:

Взять путь.
Найти конец строки.
От конца строки в обратном направлении искать "слэш".
Обрезать строку по последнему слэшу.
Приписать имя ресурса.

Это работает как в Windows, так и в KolibriOS. Несмотря на то, что пути в этих ОС начинаются с разных символов.