Board.KolibriOS.org

Official KolibriOS board
It is currently Sun Dec 15, 2019 10:34 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 236 posts ]  Go to page Previous 1 2 3 4 516 Next
Author Message
PostPosted: Sun Nov 20, 2016 1:24 am 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5067
Pathoswithin wrote:
А разве размер изначально где-то был объявлен? В коде было где как: и 1024, и 4096, и даже 260. Теперь везде одна константа. Где приложения работали, там по прежнему работают.
Одна константа - это хорошо.

Serge wrote:
Это от приложения зависит. Главное, что не падало в ядре с утечкой памяти. Я напомню, что все программы на Си/Си++ обязательно получают путь к приложению. Независимо от того, нужен он им, или нет. Т.е. все эти программы в данный момент уязвимы.
Можно подробнее об этой проблеме?
Она есть в данный момент у программ на С--, Fplay, Kosilka, updf... ? Чем эта проблема опасна?

_________________
Через тернии к звездам


Top
   
PostPosted: Sun Nov 20, 2016 2:06 am 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1264
На практике нужно хорошо постараться, чтоб получить путь длиннее 1024 байт, потому проблема скорей теоретическая.


Top
   
PostPosted: Sun Nov 20, 2016 3:10 pm 
Offline
User avatar

Joined: Sun Oct 30, 2016 1:30 am
Posts: 64
Мне кажется, что ограничение на длину пути может быть только для определенных приложений для совместимости с различными ОС, файловыми системами и функции "записи" iso-образов. Потому как большинство файловых систем не имеет ограничений на длину пути. И для приложений Колибри его теоретически тоже может не быт.

Pathoswithin wrote:
На практике нужно хорошо постараться, чтоб получить путь длиннее 1024 байт, потому проблема скорей теоретическая.

Я с этой проблемой столкнулся в далёком 2003 году, когда собственноручно награбленную коллекцию mp3-шек на болванку (оптический диск) записывал. Тогда я еще не пользовался ID3-тегами (а возможно и не знал), и как можно больше данных в имена файлов и папок помещал. :mrgreen:


Top
   
PostPosted: Sun Nov 20, 2016 6:25 pm 
Offline

Joined: Sun Aug 09, 2015 3:41 pm
Posts: 110
Pathoswithin wrote:
И я действительно не признаю косяков

Даже доказывать не надо.
Pathoswithin wrote:
На практике нужно хорошо постараться, чтоб получить путь длиннее 1024 байт, потому проблема скорей теоретическая.

Вероятностное программирование: если вероятность проявления бага мала можно считать, что его нет. © Pathoswithin


Top
   
PostPosted: Sun Nov 20, 2016 7:57 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1264
Да, я консервативен и люблю вероятностное программирование. Жаль, что его эпоха миновала, и в наше время можно считать, что бага нет, если он не сильно мешает.


Top
   
PostPosted: Wed Nov 23, 2016 2:12 am 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5067
Теперь и Quake не работает!

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

_________________
Через тернии к звездам


Top
   
PostPosted: Wed Nov 23, 2016 2:33 am 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1264
... а мне всё меньше нравятся высокоуровневые языки. Что они там с этой строкой вытворяют?


Top
   
PostPosted: Wed Nov 23, 2016 2:48 am 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5067
Нет никакой магии, у низкоуровневых должна быть та же самая проблема.

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

_________________
Через тернии к звездам


Top
   
PostPosted: Wed Nov 23, 2016 2:50 am 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1264
Ассемблерные программы именно так и делают, и вроде не обламываются.


Top
   
PostPosted: Wed Nov 23, 2016 2:53 am 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5067
У меня была проблема в С--, давай я завтра тебе зарепорчу.

_________________
Через тернии к звездам


Top
   
PostPosted: Wed Nov 23, 2016 2:55 am 
Offline

Joined: Sun Oct 27, 2013 8:13 pm
Posts: 142
Я предполагаю, что некоторые программы просто соединяют argv[0] и остальные параметры в одну строку, а затем делают парсинг этой строки. При этом, управляющие символы, к которым относится "сердечко" приравниваются к пробелам. И получается, что argv[0] = "", а путь приложения оказывается в argv[1]. Возможные решения:
- Сделать UTF-8 без маркера, по умолчанию.
- Записывать юникодный argv[0] не в 0x20, а куда-нибудь в другое место. Если свободных полей в заголовке исполняемого файла больше не осталось, то есть еще сигнатура "MENUET01" -- два dword'а с адресами 0x0 и 0x4.


Top
   
PostPosted: Wed Nov 23, 2016 8:25 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Quote:
И получается, что argv[0] = "", а путь приложения оказывается в argv[1]

Этого точно не получается. Путь не может попасть в аргументы командной строки.


Top
   
PostPosted: Wed Nov 23, 2016 8:28 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Pathoswithin wrote:
... а мне всё меньше нравятся высокоуровневые языки. Что они там с этой строкой вытворяют?
Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость. Я никогда не буду нарушать обратную совместимость.


Top
   
PostPosted: Wed Nov 23, 2016 10:04 am 
Offline

Joined: Tue Mar 08, 2016 11:00 pm
Posts: 436
В newlib захаркодено 1024 байта на путь.

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


Top
   
PostPosted: Wed Nov 23, 2016 12:10 pm 
Offline

Joined: Sun Oct 27, 2013 8:13 pm
Posts: 142
Serge wrote:
Этого точно не получается. Путь не может попасть в аргументы командной строки.

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

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

Вот алгоритм:

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

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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 236 posts ]  Go to page Previous 1 2 3 4 516 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited