abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
včera 21:33 | Zajímavý projekt

Zdrojové kódy operačního systému RISC OS pro architekturu ARM byly již dříve s omezeními zveřejňovány na RISC OS Open. Nyní bylo oznámeno, že RISC OS přejde kompletně pod licenci Apache 2.0.

Fluttershy, yay! | Komentářů: 0
včera 16:00 | Nová verze

Byl vydán Mozilla Firefox 63.0. Přehled novinek v poznámkách k vydání a na stránce věnované vývojářům. Vylepšeno bylo například blokování obsahu a ochrana proti sledování. Rozšíření ve Firefoxu na Linuxu běží nově v samostatném procesu.

Ladislav Hagara | Komentářů: 0
včera 11:00 | Humor

Před týdnem byly zveřejněny informace o bezpečnostní chybě CVE-2018-10933 v knihovně libssh implementující protokol SSH. Autentizaci bylo možné jednoduše obejít odesláním zprávy SSH2_MSG_USERAUTH_SUCCESS. Chyba byla opravena v upstream verzích libssh 0.8.4 a 0.7.6. Chris Lamb, vedoucí projektu Debian, zveřejnil na Twitteru upravený komiks Cyanide & Happiness věnovaný této bezpečnostní chybě.

Ladislav Hagara | Komentářů: 0
včera 10:22 | Komunita

Mozilla na svém blogu Future Releases oznámila spolupráci se švýcarskou společností Proton Technologies stojící za šifrovanou poštou ProtonMail a virtuální privátní sítí ProtonVPN. Právě službu ProtonVPN v ceně 10 dolarů měsíčně začne Mozilla od zítra postupně nabízet uživatelům Firefoxu v USA. Část peněz bude použita na další rozvoj Firefoxu.

Ladislav Hagara | Komentářů: 0
včera 00:22 | Nová verze

Byla vydána verze 11.4 open source alternativy GitHubu, tj. softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech, GitLab (Wikipedie). Představení nových vlastností i s náhledy v příspěvku na blogu.

Ladislav Hagara | Komentářů: 0
včera 00:11 | Zajímavý článek

Jiří Eischmann se v příspěvku Datovka na Flathubu na svém blogu věnuje aplikaci Datovka, tj. multiplatformní desktopové aplikaci pro přístup k datovým schránkám a k trvalému uchovávání datových zpráv v lokální databázi, ve formátu Flatpak. Instalovat ji lze přímo z Flathubu.

Ladislav Hagara | Komentářů: 0
22.10. 22:55 | Komunita

Richard Stallman představil první verzi dokumentu s názvem GNU Kind Communication Guidelines s doporučeními pro přispěvatele do projektu GNU. Cílem doporučení je udržovat v komunitě přátelskou atmosféru.

Ladislav Hagara | Komentářů: 6
22.10. 22:22 | Nová verze

Byl vydán Linux 4.19. Jeho vývoj dokončil a vydání oficiálně oznámil Greg Kroah-Hartman, poněvadž si Linus Torvalds vzal před pěti týdny volno a rozhodl se zapracovat na svém chování. Ke kontroverznímu dokumentu Contributor Covenant Code of Conduct přibyla jeho interpretace Linux Kernel Contributor Covenant Code of Conduct Interpretation. Přehled nových vlastností a vylepšení Linuxu 4.19 na stránce Linux Kernel Newbies a samozřejmě v Jaderných novinách. Kódové jméno Linuxu bylo změněno z Merciless Moray na People's Front.

Ladislav Hagara | Komentářů: 5
22.10. 02:00 | Pozvánky

Konference OpenAlt 2018 (dříve LinuxAlt a Openmobility) proběhne již o víkendu 3. a 4. listopadu na FIT VUT v Brně. Motto konference je "Otevřeným přístupem k otevřené společnosti". Připraveno je 8 tracků přednášek a workshopů. Pořadatelé připravili výběr toho nejzajímavějšího.

Ladislav Hagara | Komentářů: 0
21.10. 01:00 | IT novinky

Bylo vydáno RFC 8484 řešící posílání DNS dotazů a získávání DNS odpovědí přes protokol HTTPS (DoH, DNS over HTTPS). V aktuálních verzích Firefoxu je DoH ve výchozím nastavení zakázáno. Povolit jej lze v about:config změnou hodnoty network.trr.mode (Trusted Recursive Resolver). V srpnu zveřejnila Mozilla výsledky experimentu s DNS přes HTTPS ve Firefoxu Nightly.

Ladislav Hagara | Komentářů: 50
Přispíváte osobně k vývoji svobodného softwaru?
 (40%)
 (42%)
 (24%)
 (23%)
 (12%)
 (36%)
Celkem 291 hlasů
 Komentářů: 17, poslední 22.10. 22:11
Rozcestník

strcpy(): narušení \W v $PS1

18.12.2011 21:03 | Přečteno: 1482× | Programování | Výběrový blog | poslední úprava: 18.12.2011 21:06

Debian GNU/Linux Squeeze x86_64 obsahuje verzi Bashe, ve kterém se projevuje chyba při expanzi \W, v proměné $PS1, např. při vstupu do adresáře na první úrovni o velikosti čtyři znaky.

$ PS1="\W$ "
$ cd /boot
bott$ cd /home
hmee$ cd /proc
pocc$

Bugfix, vypadá následovně (String corruption using \W in prompt):

t = strrchr (t_string, '/');
if (t)
-    strcpy (t_string, t + 1);
+    memmove (t_string, t + 1, sizeof(t));

Na první pohled by si jeden řekl, v čem je problém, i při pohledu do implementace vypadá fce strcpy() tak jak jsem si jí představoval.

$ apt-get source eglibc
$ cd eglibc-2.11.2/string/
$ cpp strcpy.c

typedef long int ptrdiff_t;

char *
strcpy (dest, src)
     char *dest;
     const char *src;
{
  char c;
  char * s = (char *) (src);
  const ptrdiff_t off = (dest) - s - 1;
  size_t n;

  do
    {
      c = *s++;
      s[off] = c;
    }
  while (c != '\0');

  n = s - src;
  (void) (src + n);
  (void) (dest + n);

  return dest;
}

Ale v manuálové stránce k fci strcpy() píší, že se vstupní řetězce nesmí překrývat. Což mě nasměruje ke spuštění:

$ find -name 'strcpy.*'
./sysdeps/powerpc/powerpc32/strcpy.S
./sysdeps/powerpc/powerpc64/strcpy.S
./sysdeps/ia64/strcpy.S
./sysdeps/i386/i586/strcpy.S
./sysdeps/x86_64/strcpy.S
./sysdeps/x86_64/multiarch/strcpy.S
./sysdeps/s390/s390-64/strcpy.S
./sysdeps/s390/s390-32/strcpy.S
./sysdeps/sparc/sparc32/sparcv9/strcpy.S
./sysdeps/sparc/sparc32/strcpy.S
./sysdeps/sparc/sparc64/strcpy.S
./string/strcpy.c
./ports/sysdeps/vax/strcpy.s
./ports/sysdeps/alpha/strcpy.S

Při letmém pohledu do ./sysdeps/x86_64/strcpy.S už je nasnadě, že zakopaný pes je v optimalizacích pro architekturu x86_64, tj. implementace fce strcpy() přímo v assembleru.

Ponaučení, je lepší se přesvědčit, alespoň v manuálové stránce, že zamýšlené použití fce je přípustné, nežli střílet od boku. ;-)

Problém lze obejít tak, že se místo '\W' použije:

'$(basename $PWD)'
       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Vložit další komentář

Fuky avatar 18.12.2011 21:05 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: strcpy(): narušení \W v $PS1
Příloha:
Příloha ./sysdeps/x86_64/strcpy.S.
18.12.2011 22:09 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: strcpy(): narušení \W v $PS1
Problém lze obejít tak, že se místo '\W' použije:
'$(basename $PWD)'

To bych nedoporučoval, protože by to znamenalo spuštění nového programu při každém zobrazení promptu. Praktičtější by bylo '${PWD##*/}'

18.12.2011 23:43 Kuk!
Rozbalit Rozbalit vše Re: strcpy(): narušení \W v $PS1
Hmm, k cemu je tam na konci

(void) (src + n);

(void) (dest + n);

?
Fuky avatar 19.12.2011 08:37 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: strcpy(): narušení \W v $PS1

Jak je naznačeno, kód je prohnaný preprocesorem, původně je tam makro, které umožňuje zkompilovat ladící verzi s aktivovanou kontrolou hranic ukazatelů.

(void) CHECK_BOUNDS_HIGH (src + n);
(void) CHECK_BOUNDS_HIGH (dest + n);

why the performance of strcpy in glibc is worse?

19.12.2011 06:11 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: strcpy(): narušení \W v $PS1
Ještě dvě poznámky: 1. Ani ten céčkový zdroják, který je tu uveden, by obecně nefungoval při překryvu (jen by vadil opačný případ dest > src). 2. strcpy() je IIRC jedna z funkcí, které dostatečně nové verze gcc nahrazují vlastní optimalizovanou implementací, takže ani ta assemblerová verze ze zdrojáků glibc nemusí být tou, která se nakonec skutečně použije.

Založit nové vláknoNahoru

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.