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í
×
dnes 00:22 | Nová verze

Byla vydána verze 1.0 svobodné multiplatformní závodní hry SuperTuxKart (STK). Přehled novinek v příspěvku na blogu. Zdůraznit lze především víceuživatelský mód umožňující hrát hru po síti. Videoprezentace nejnovější verze na YouTube.

Ladislav Hagara | Komentářů: 1
včera 15:55 | Komunita

Ke zhlédnutí jsou videozáznamy grafických rozhraní telefonů, zatím jenom vývojových desek, Librem 5 a PinePhone. Librem 5 za 649 dolarů by měl být aktuálně k dispozici ve třetím čtvrtletí 2019. Při spuštění kampaně se mluvilo o lednu 2019. PinePhone za 150 dolarů by měl být odesílán ve čtvrtém čtvrtletí 2019.

Ladislav Hagara | Komentářů: 0
19.4. 20:22 | Nová verze

Po dvou měsících vývoje od vydání verze 6.0.0 byla oficiálně vydána nová verze 6.1.0 správce digitálních fotografií a nově i videí digiKam (digiKam Software Collection, Wikipedie). Přehled novinek i s náhledy v oficiálním oznámení. Vývojáři zdůrazňují nové API pro rozšíření DPlugins nahrazující KIPI. Ke stažení je také balíček ve formátu AppImage. Stačí jej stáhnout, nastavit právo ke spuštění a spustit.

Ladislav Hagara | Komentářů: 0
19.4. 19:55 | Nová verze

Byla vydána verze 1.16.0, tj. první stabilní verze nové řady 1.16, multiplatformního multimediálního frameworku GStreamer (Wikipedie). Z novinek lze zdůraznit vylepšení podpory WebRTC nebo AV1. Podrobnosti v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
19.4. 11:55 | Nová verze

Po více než 3 letech od vydání verze 1.3.0 byla vydána nová stabilní verze 1.4 multimediálního přehrávače MPlayer (Wikipedie). Nejnovější verze přináší kompatibilitu s verzí 4.1 a také s aktuální vývojovou verzí multiplatformní multimediální knihovny FFmpeg (Wikipedie).

Ladislav Hagara | Komentářů: 14
18.4. 23:55 | Komunita

Mozilla oznámila, že projekt Things byl přejmenován na WebThings. Nové jméno by mělo zdůraznit, že se nejedná pouze o projekt IoT (Internet věcí), ale o WoT (Web věcí). Současně byla vydána WebThings Gateway (GitHub) ve verzi 0.8 pro Raspberry Pi.

Ladislav Hagara | Komentářů: 0
18.4. 21:11 | Nová verze

Byl vydán balík KDE Aplikace ve verzi 19.04. Shrnuje práce za poslední čtyři měsíce: opravy chyb, mj. ve správci souborů Dolphin, prohlížeči dokumentů (nejen PDF) Okular nebo prohlížeči obrázků Gwenview – tyto dostaly např. lepší podporu dotykových obrazovek. Významného přepracování se dočkal editor videa Kdenlive.

Fluttershy, yay! | Komentářů: 3
18.4. 16:22 | Nová verze

Byla vydána verze 19.04 linuxové distribuce Ubuntu a oficiálních odnoží Ubuntu Budgie, Kubuntu, Lubuntu, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio a Xubuntu. Kódový název Ubuntu 19.04 je Disco Dingo. Přehled novinek a odkazy ke stažení v poznámkách k vydání. Ubuntu 19.04 bude podporováno 9 měsíců, tj. do ledna 2020.

Ladislav Hagara | Komentářů: 10
18.4. 09:55 | Nová verze

Byla vydána verze 8.0 sady aplikací pro SSH komunikaci OpenSSH. Řešena je bezpečnostní chyba CVE-2019-6111 v scp. Přidána byla experimentální podpora výměny klíčů, která je odolná vůči kvantovým počítačům (Streamlined NTRU Prime 4591^761 a X25519). Výchozí délka nově generovaných RSA klíčů je 3072 bitů.

Ladislav Hagara | Komentářů: 0
17.4. 22:44 | Komunita

Zend Framework, open source objektově orientovaný webový aplikační framework implementovaný v PHP, byl předán neziskovému technologickému konsorciu Linux Foundation. Framework se pod novým názvem Laminas v průběhu několika měsíců stane oficiálním projektem konsorcia.

Ladislav Hagara | Komentářů: 4
Používáte headset pro virtuální realitu?
 (1%)
 (3%)
 (1%)
 (20%)
 (0%)
 (74%)
Celkem 215 hlasů
 Komentářů: 12, poslední 18.4. 01:19
Rozcestník

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

18.12.2011 21:03 | Přečteno: 1506× | 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.
20.11.2018 08:17 happy wheels
Rozbalit Rozbalit vše susu
A lot of people are paying attention and so do I. thank you for sharing. happy wheels

Založit nové vláknoNahoru

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