U 3.6% di i repositori Python testati anu mancatu errori di virgola

I risultati di un studiu nantu à a vulnerabilità di u codice Python à l'errori ligati à l'usu incorrectu di virgule in u codice sò stati publicati. I prublemi sò causati da u fattu chì quandu l'enumerazione, Python concatena automaticamente e stringhe in a lista si ùn sò micca siparati da una virgola, è ancu tratta u valore cum'è una tupla se u valore hè seguitu da una virgola. Dopu avè realizatu un analisi automatizatu di 666 repositori GitHub cù u codice Python, i circadori identificanu pussibuli prublemi di virgola in 5% di i prughjetti studiati.

Ulteriore ispezione manuale hà dimustratu chì i veri errori eranu prisenti in solu 24 repository (3.6%), è l'1.4% restante eranu falsi pusitivi (per esempiu, una virgola puderia esse omessa deliberatamente trà e linee per concatenate percorsi di file multi-linea, long hash, HTML). blocchi o espressioni SQL). Hè nutate chì trà i repositori 24 cù errori veri eranu prughjetti cusì grandi cum'è Tensorflow, Google V8, Sentry, Pydata xarray, rapidpro, django-colorfield è django-helpdesk. In ogni casu, i prublemi cù i virgule ùn sò micca specifichi à Python è spessu crescenu in i prughjetti C / C ++ (esempii di correzioni recenti sò LLVM, Mono, Tensorflow).

I principali tipi di errore studiati:

  • Accidintali manca una virgola in listi, tuple è insemi, facendu chì e stringhe sò cuncatenate invece di esse interpretate cum'è valori separati. Per esempiu, in Sentry, unu di i testi mancava una virgola trà e stringhe "releases" è "discover" in a lista, chì hà risultatu in cuntrollà un inesistente "/releasesdiscover" handler, invece di verificà "/releases" è " /discover" separatamente.
    U 3.6% di i repositori Python testati anu mancatu errori di virgola

    Un altru esempiu hè chì una virgola mancante in rapidpro hà causatu duie regule diffirenti per esse unificate nantu à a linea 572:

    U 3.6% di i repositori Python testati anu mancatu errori di virgola

  • Una virgola mancante à a fine di una definizione di una tupla di un elementu, facendu chì l'assignazione assigna un tipu regulare invece di una tupla. Per esempiu, l'espressione "valori = (1,)" risulterà in una assignazione à una variabile di una tupla di un elementu, ma "valori = (1)" hà da esse una assignazione di un tipu interu. I parentesi in l'assignazioni di sopra ùn affettanu micca a definizione di tipu è sò opzionali, è a presenza di una tupla hè determinata da l'analizzatore solu basatu nantu à a presenza di virgule. REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated' # serà assignatu una stringa invece di una tupla. ) }
  • A situazione opposta hè virgule extra durante l'assignazione. Se una virgola hè accidentalmente lasciata à a fine di una assignazione, una tupla serà assignata cum'è u valore invece di u tipu abituale (per esempiu, se "value = 1", hè specificatu invece di "value = 1").

Source: opennet.ru

Add a comment