Curl zakazuje ve svém kódu funkci strcpy(), použije vlastní bezpečnější náhradu

5. 1. 2026

Sdílet

Klávesnice ruce Autor: Depositphotos

Daniel Stenberg napsal blogový příspěvek o rozhodnutí zakázat používání funkce strcpy() ve zdrojovém kódu projektu Curl. Hlavním problémem při používání funkce strcpy je, že při jeho použití nespecifikujeme délku cílového zásobníku ani zdrojového řetězce. To není problém, pokud má nad obojím programátor kontrolu a předem vše správně ošetří.

Kód projektu Curl ale funguje již desítky let a je udržován, opravován, vylepšován a zdokonalován mnoha různými autory s odlišným myšlením a přístupem. Kontroly a volání funkce se tak mohou postupně v kódu vzdalovat a mezi ně se dostávají další a další akce. Roste tím riziko, že se mezi kontrolami a použitím potenciálně rizikové funkce stane něco, co zruší jednu z kontrol nebo změní podmínky.

Aby vývojáři zajistili, že kontroly velikosti nelze oddělit od samotné funkce kopírující data, zavedli funkci nahrazení řetězce, která jako argumenty přijímá cílový zásobník, cílovou velikost, zdrojový zásobník a délku zdrojového řetězce. Operace se provede pouze v případě, že je možné provést kopírování a že se do cíle vejde také nulový terminátor.

Výsledkem je náhradní funkce curlx_strcopy() využívající memcpy(). Bylo tak možné zcela zakázat použití původního strcpy() ve zdrojovém kódu projektu Curl. Podobně to vývojáři udělali už dříve u funkce strncpy(). Použití této funkce je o něco pracnější a složitější než strcpy, protože vyžaduje více informací, ale věříme, že výhody tohoto přístupu za to stojí, píše Stenberg.

Našli jste v článku chybu?

Autor zprávičky

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.