I 3,6% af de testede Python-repositorier er der fundet fejl relateret til manglende kommaer

Resultaterne af en undersøgelse om Python-kodes sårbarhed over for fejl relateret til forkert brug af kommaer i koden er offentliggjort. Problemerne skyldes, at Python automatisk sammenkæder strenge i en liste, hvis de ikke er adskilt af kommaer, samt at det behandler værdien som et tuple, hvis der efter værdien følger et komma. Gennem en automatiseret analyse af 666 GitHub-repositorier med Python-kode fandt forskerne mulige problemer med kommaer i 5% af de undersøgte projekter.

Videre manuel kontrol viste, at der kun er reelle fejl i 24 repositories (3,6%), mens de øvrige 1,4% er falske positiver (for eksempel kan et komma være med vilje sprunget over mellem strenge for at sammenkæde filstier, lange hashes, HTML-blokke eller SQL-udtryk). Bemærkelsesværdigt er det, at de 24 repositories med reelle fejl inkluderer store projekter som Tensorflow, Google V8, Sentry, Pydata xarray, rapidpro, django-colorfield og django-helpdesk. Problemer med kommaer er ikke specifikke for Python og dukker ofte op i projekter skrevet i C/C++ (eksempler på nylige rettelser inkluderer LLVM, Mono, Tensorflow).

De vigtigste typer fejl, der blev undersøgt:

  • Et utilsigtet manglende komma i lister, tuples og mængder, der fører til sammenkædning af strenge i stedet for at fortolke dem som separate værdier. For eksempel blev der i Sentry i en af testsene sprunget et komma over mellem strenge "releases" og "discover" i listen, hvilket førte til kontrol af den ikke-eksisterende handler "/releasesdiscover" i stedet for at kontrollere "/releases" og "/discover" separat.
    I 3,6% af de testede Python-repositorier er der fundet fejl relateret til manglende kommaer

    Et andet eksempel – et manglende komma i rapidpro førte til sammenkædning af to forskellige regler på linje 572:

    I 3,6% af de testede Python-repositorier er der fundet fejl relateret til manglende kommaer
  • Et manglende komma i slutningen af en definition af et enkelt-element tuple, der fører til, at der ved tildeling tilskrives en almindelig type i stedet for et tuple. For eksempel vil udtrykket "values = (1,)" føre til, at variablen får tildelt et tuple med ét element, mens "values = (1)" vil føre til, at der tildeles en heltalstype. Parentheserne i de angivne tildelinger påvirker ikke type-definitionen og er fakultative, mens tilstedeværelsen af et tuple kun bestemmes af parseren baseret på forekomsten af kommaer. REST_FRAMEWORK = { ‘DEFAULT_PERMISSION_CLASSES’: ( ‘rest_framework.permissions.IsAuthenticated’ # i stedet for et tuple vil der tildeles en streng. ) }
  • Den modsatte situation — overflødige kommaer ved tildeling. Hvis der ved en fejltagelse er efterladt et komma ved afslutningen af tildelingen, vil værdien i stedet for en almindelig type blive tildelt som en tuple (for eksempel, hvis der står "value = 1," i stedet for "value = 1").

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster